Thorny_Devil 发表于 2015-4-17 23:10

菜鸟的卡布列克运算 源代码

本帖最后由 Thorny_Devil 于 2015-4-17 23:14 编辑

高手请直接忽略,勿喷,

哪里写的不好大可指出,,毕竟我是菜鸟。

问题描述:
卡布列克运算是指对任意一个四位数,只要他们各个位上的数字不完全相同,
就有这样的规律:
   1:把组成这个四位数的四个数字重新生成最大的四位数;如(3910重组后为9310)
   2:把组成这个四位数的四个数字重新生成最小的四位数;如(7600重组后为67)
   3:求出以上两数之差,得到一个新的四位数。
   重复以上过程,总能得到最后结果6174.
   编写卡布列克运算的验证程序。
示例:
输入:1008
输出:步骤1:1008重组最大数为8100,最小数为18, 生成数为:8100-18=8082
      步骤2:8082重组最大数为8820,最小数为288,生成数为:8820-288=8532
      步骤3:8532重组最大数为8532,最小数为288,生成数为:8532-2358=6174
      结束。

#include<iostream>
using namespace std;

int a = {0};//存放分解后的数字
int num_max = 0;//重组生成的最大数
int num_min = 0;//重组生成最小的数
int num_new = 0;//生成数

/*** 输入一个四位数 ***/
int get_num(){
      int num;
      cout << "请输入一个4位数:" ;
      cin >> num;
      while(num < 1000 || num > 9999){
               cout << "输入有误,请重新输入一个四位数:";
               cin >> num;
                cout << endl;
      }
      return num;
}

/*** 分解输入的四位数 ***/
void resolve(int num){
      a = int (num / 1000);
      a = int ((num - a * 1000) / 100);
      a = int ((num - a * 1000 - a * 100) / 10);
      a = num % 10;
}

/*** 对分解的四位数进行排序及重组 ***/
void sort_recombine(int num){
      int i,j,min;
      for (i = 0;i < 4 - 1;i++){      //做第 i + 1 次排序
                min = i;                              //在当前没有排序的数字中选出最小值,并记录a
                for (j = i + 1;j < 4;j++){
                        if (a < a){
                              min = j;                //记录下目前找到的最小数值所在位置
                                 a = a ^ a;
                                 a = a ^ a;
                                 a = a ^ a;
                                                               //交换a和a
                        }
                        
                }
      }
      
      num_max = a * 1000 + a * 100 + a * 10 + a;
      num_min = a * 1000 + a * 100 + a * 10 + a;
      num_new = num_max - num_min;
      cout<< "" << num;
      cout << " 重组最大数为:" << num_max << ",重组最小数为:" << num_min;
      cout << ",生成数为:" << num_new << endl;
}

/*** 计算卡布列克数 ***/
void calculate(){
      while (num_new != 6174){
                resolve(num_new);
                sort_recombine(num_new);
                calculate();
      }
}

int main(){
      int num = get_num();      //输入四位数
      resolve(num);                         //输入的数进行分解
      sort_recombine(num);      //分解后的数字进行排序及重组
      calculate();                        //计算卡布列克数
      return 0;
}

wanmei 发表于 2015-4-17 23:24

菜鸟路过,连楼主说的什么都不知道

小吾 发表于 2015-4-17 23:38

学习了,谢谢

Thorny_Devil 发表于 2015-4-18 02:07

wanmei 发表于 2015-4-17 23:24
菜鸟路过,连楼主说的什么都不知道

加油,,天天向上

Thorny_Devil 发表于 2015-4-18 02:08

小吾 发表于 2015-4-17 23:38
学习了,谢谢

共同进步

羽幻倾城 发表于 2017-3-5 19:17

没有排除各个位上的数字不相同

loong96 发表于 2017-3-6 09:57

楼主棒棒的
页: [1]
查看完整版本: 菜鸟的卡布列克运算 源代码