首页
社区
课程
招聘
[旧帖] [原创]新手写的卡布列克运算 0.00雪花
发表于: 2015-4-18 11:19 1586

[旧帖] [原创]新手写的卡布列克运算 0.00雪花

2015-4-18 11:19
1586
高手直接绕道,我是菜鸟,勿喷

问题描述:
  卡布列克运算是指对任意一个四位数,只要他们各个位上的数字不完全相同,
  就有这样的规律:
   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[4] = {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[0] = int (num / 1000);
  a[1] = int ((num - a[0] * 1000) / 100);
  a[2] = int ((num - a[0] * 1000 - a[1] * 100) / 10);
  a[3] = num % 10;
}

/*** 对分解的四位数进行排序及重组 ***/
void sort_recombine(int num){
  int i,j,min;
  for (i = 0;i < 4 - 1;i++){  //做第 i + 1 次排序 
    min = i;        //在当前没有排序的数字中选出最小值,并记录a[min] 
    for (j = i + 1;j < 4;j++){ 
      if (a[j] < a[i]){
        min = j;    //记录下目前找到的最小数值所在位置 
         a[i] = a[i] ^ a[min];
         a[min] = a[min] ^ a[i];
         a[i] = a[i] ^ a[min];
                 //交换a[i]和a[min] 
      }
      
    }
  }
  
  num_max = a[3] * 1000 + a[2] * 100 + a[1] * 10 + a[0];
  num_min = a[0] * 1000 + a[1] * 100 + a[2] * 10 + a[3];
  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;
}

[课程]FART 脱壳王!加量不加价!FART作者讲授!

收藏
免费 0
支持
分享
最新回复 (1)
雪    币: 85
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
数学方面不太懂,呵呵!
2015-4-29 09:16
0
游客
登录 | 注册 方可回帖
返回
//