菜鸟的卡布列克运算 源代码
本帖最后由 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
学习了,谢谢
共同进步 没有排除各个位上的数字不相同 楼主棒棒的
页:
[1]