问题描述
呵呵我今天把它贴出来啦在我csdn的空间里各位感兴趣的可以去看看啊写的不好不是很完善请各位指导哈献丑啦我也是学java的但是对C我更有把握一点所以程序是用C写的也是看到有同学在这里关于这个问题的发帖了大家多交流啊贴到这顺便给我顶一哈我也是刚刚加进来的**********************************************
解决方案二:
任意一个5位数,比如:34256,把它的各位数字打乱,重新排列,可以得到一个最大的数:
解决方案三:
65432,一个最小的数23456。求这两个数字的差,得:41976,把这个数字再次重复上述过程
解决方案四:
(如果不足5位,则前边补0)。如此往复,数字会
解决方案五:
落入某个循环圈(称为数字黑洞)。
解决方案六:
请编写程序,找到5位数所有可能的循环圈,并输出,每个循环圈占1行。其中5位数全都相同则循环圈为[0],这个可以不考虑。循环圈的输出格式仿照:
解决方案七:
[82962,75933,63954,61974]
解决方案八:
个人百度空间http://hi.baidu.com/zjcjava
解决方案九:
author:zjcjav
解决方案十:
*************************************************/#include<stdio.h>#include<stdlib.h>//排序voidsortNum(int*oldNum,int*bigNum){//printf("nsort方法:");本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/zjcjava/archive/2011/05/02/6384250.aspx
解决方案
解决方案十一:
/**********************************************
解决方案十二:
任意一个5位数,比如:34256,把它的各位数字打乱,重新排列,可以得到一个最大的数:
解决方案十三:
65432,一个最小的数23456。求这两个数字的差,得:41976,把这个数字再次重复上述过程
解决方案十四:
(如果不足5位,则前边补0)。如此往复,数字会
解决方案十五:
落入某个循环圈(称为数字黑洞)。
解决方案:
请编写程序,找到5位数所有可能的循环圈,并输出,每个循环圈占1行。其中5位数全都相同则循环圈为[0],这个可以不考虑。循环圈的输出格式仿照:
解决方案:
[82962,75933,63954,61974]
解决方案:
http://bbs.bccn.net/thread-338031-1-1.html
解决方案:
author:zjcjav
解决方案:
*************************************************/#include<stdio.h>#include<stdlib.h>//排序voidsortNum(int*oldNum,int*bigNum){//printf("nsort方法:");inttemp=0;for(inti=0;i<5;i++){for(intj=0;j<4;j++)if(oldNum[j]>oldNum[j+1]){temp=oldNum[j+1];oldNum[j+1]=oldNum[j];oldNum[j]=temp;}}for(intk=0;k<5;k++){bigNum[k]=oldNum[4-k];//printf("%d",bigNum[k]);}//printf("n");}//转为数字intarrytoInt(int*arry){intnumber;number=arry[0]*10000+arry[1]*1000+arry[2]*100+arry[3]*10+arry[4];returnnumber;}//heidongintblackHol(intdig,int*allAnsw,intans){intsubSort[100],inNum[5],bigNum[5];inti=0,start=0;while(dig){for(intj=0;j<5;j++){inNum[j]=dig%10;//将数字保存在数组中dig=(dig-dig%10)/10;//printf("%d+++",num);//printf("%d+++",inNum[j]);}//printf("nsort方法:");sortNum(inNum,bigNum);subSort[i]=arrytoInt(bigNum)-arrytoInt(inNum);//printf("%d-%d=%dn",arrytoInt(bigNum),arrytoInt(inNum),subSort[i]);if(i==0)dig=subSort[i];//当开始时不会进入循环;因此要手动赋值for(intm=0;m<i;m++){//printf("subsort方法第%d%d次,subSort:%dn",i,m,subSort[i]);dig=subSort[i];//并把差赋给寻控制循环的bigif(subSort[m]==subSort[i])//找到循环圈{intisAs=0;start=m;//把下标赋给开始的值//printf("%dn",m);for(intn=0;n<ans;n++){if(allAnsw[n]==subSort[start])isAs++;}if(isAs==0)//和以前的答案作比较,不同则输出{allAnsw[ans++]=subSort[start];//把每个圈的开始数存入,printf("[");//输出结果for(;start<i;start++)printf("%d,",subSort[start]);printf("]n");break;}}}//if(start!=0)break;//控制外循环结束if(start!=0)break;i++;//printf("输出i的值%dn",i);}returnans;}voidmain(){intnum,allAnsw[100]={0},ans=0;//数字,答案集合,答案个数printf("*****************************************************************************n");printf("输入一个各个位都不相等的五位数如:(34256)!n");printf("任意一个5位数,把它的各位数字重新排列,可以得到一个最大的数:一个最小的数。n");printf("求这两个数字的差,得:41976,把这个数字再次重复上述过程。如此往复,数字会n");printf("得到一个循环圈,求出所有五位数的所有可能循环———————————n");printf("*****************************************************************************n");printf("*********************原题出自2010国信蓝点c语言题目******n");printf("*********************zjcjava完成于2011.4月******n");printf("*****************************************************************************nn");printf("所有情况如下:n");//sortNum(inNum,littNum);for(num=10000;num<=99998;num++){intdig=num;//printf("%d---",num);if(num%11111==0)continue;else{//调用//intdig=34256;ans=blackHol(dig,allAnsw,ans);//答案的个数返回/***********************************************************//*intsubSort[100],inNum[5],bigNum[5];intstart=0,i=0,j=0;;while(dig){printf("这是第%d次循环dig:%d---",i,dig);for(intj=0;j<5;j++){inNum[j]=dig%10;//将数字保存在数组中dig=(dig-dig%10)/10;//printf("%d+++",num);//printf("%d+++",inNum[j]);}//printf("nsort方法:");sortNum(inNum,bigNum);subSort[i]=arrytoInt(bigNum)-arrytoInt(inNum);printf("%d-%d=%dn",arrytoInt(bigNum),arrytoInt(inNum),subSort[i]);if(i==0)dig=subSort[i];for(intm=0;m<i;m++){printf("subsort方法第%d%d次,subSort:%dn",i,m,subSort[i]);dig=subSort[i];if(subSort[m]==subSort[i]){start=m;printf("%dn",m);printf("[");//输出结果for(;start<i;start++)printf("%d,",subSort[start]);printf("]n");break;}}if(start!=0)break;i++;}*//******************************************************/}}printf("所有循环圈的开始值:n");for(intn=0;n<ans;n++)printf("%dt",allAnsw[n]);}
解决方案:
/**********************************************
解决方案:
任意一个5位数,比如:34256,把它的各位数字打乱,重新排列,可以得到一个最大的数:
解决方案:
65432,一个最小的数23456。求这两个数字的差,得:41976,把这个数字再次重复上述过程
解决方案:
(如果不足5位,则前边补0)。如此往复,数字会
解决方案:
落入某个循环圈(称为数字黑洞)。
解决方案:
请编写程序,找到5位数所有可能的循环圈,并输出,每个循环圈占1行。其中5位数全都相同则循环圈为[0],这个可以不考虑。循环圈的输出格式仿照:
解决方案:
[82962,75933,63954,61974]
解决方案:
http://bbs.bccn.net/thread-338031-1-1.html
解决方案:
author:zjcjav
解决方案:
*************************************************/#include<stdio.h>#include<stdlib.h>//排序voidsortNum(int*oldNum,int*bigNum){//printf("nsort方法:");inttemp=0;for(inti=0;i<5;i++){for(intj=0;j<4;j++)if(oldNum[j]>oldNum[j+1]){temp=oldNum[j+1];oldNum[j+1]=oldNum[j];oldNum[j]=temp;}}for(intk=0;k<5;k++){bigNum[k]=oldNum[4-k];//printf("%d",bigNum[k]);}//printf("n");}//转为数字intarrytoInt(int*arry){intnumber;number=arry[0]*10000+arry[1]*1000+arry[2]*100+arry[3]*10+arry[4];returnnumber;}//heidongintblackHol(intdig,int*allAnsw,intans){intsubSort[100],inNum[5],bigNum[5];inti=0,start=0;while(dig){for(intj=0;j<5;j++){inNum[j]=dig%10;//将数字保存在数组中dig=(dig-dig%10)/10;//printf("%d+++",num);//printf("%d+++",inNum[j]);}//printf("nsort方法:");sortNum(inNum,bigNum);subSort[i]=arrytoInt(bigNum)-arrytoInt(inNum);//printf("%d-%d=%dn",arrytoInt(bigNum),arrytoInt(inNum),subSort[i]);if(i==0)dig=subSort[i];//当开始时不会进入循环;因此要手动赋值for(intm=0;m<i;m++){//printf("subsort方法第%d%d次,subSort:%dn",i,m,subSort[i]);dig=subSort[i];//并把差赋给寻控制循环的bigif(subSort[m]==subSort[i])//找到循环圈{intisAs=0;start=m;//把下标赋给开始的值//printf("%dn",m);for(intn=0;n<ans;n++){if(allAnsw[n]==subSort[start])isAs++;}if(isAs==0)//和以前的答案作比较,不同则输出{allAnsw[ans++]=subSort[start];//把每个圈的开始数存入,printf("[");//输出结果for(;start<i;start++)printf("%d,",subSort[start]);printf("]n");break;}}}//if(start!=0)break;//控制外循环结束if(start!=0)break;i++;//printf("输出i的值%dn",i);}returnans;}voidmain(){intnum,allAnsw[100]={0},ans=0;//数字,答案集合,答案个数printf("*****************************************************************************n");printf("输入一个各个位都不相等的五位数如:(34256)!n");printf("任意一个5位数,把它的各位数字重新排列,可以得到一个最大的数:一个最小的数。n");printf("求这两个数字的差,得:41976,把这个数字再次重复上述过程。如此往复,数字会n");printf("得到一个循环圈,求出所有五位数的所有可能循环———————————n");printf("*****************************************************************************n");printf("*********************原题出自2010国信蓝点c语言题目******n");printf("*********************zjcjava完成于2011.4月******n");printf("*****************************************************************************nn");printf("所有情况如下:n");//sortNum(inNum,littNum);for(num=10000;num<=99998;num++){intdig=num;//printf("%d---",num);if(num%11111==0)continue;else{//调用//intdig=34256;ans=blackHol(dig,allAnsw,ans);//答案的个数返回/***********************************************************//*intsubSort[100],inNum[5],bigNum[5];intstart=0,i=0,j=0;;while(dig){printf("这是第%d次循环dig:%d---",i,dig);for(intj=0;j<5;j++){inNum[j]=dig%10;//将数字保存在数组中dig=(dig-dig%10)/10;//printf("%d+++",num);//printf("%d+++",inNum[j]);}//printf("nsort方法:");sortNum(inNum,bigNum);subSort[i]=arrytoInt(bigNum)-arrytoInt(inNum);printf("%d-%d=%dn",arrytoInt(bigNum),arrytoInt(inNum),subSort[i]);if(i==0)dig=subSort[i];for(intm=0;m<i;m++){printf("subsort方法第%d%d次,subSort:%dn",i,m,subSort[i]);dig=subSort[i];if(subSort[m]==subSort[i]){start=m;printf("%dn",m);printf("[");//输出结果for(;start<i;start++)printf("%d,",subSort[start]);printf("]n");break;}}if(start!=0)break;i++;}*//******************************************************/}}printf("所有循环圈的开始值:n");for(intn=0;n<ans;n++)printf("%dt",allAnsw[n]);}
解决方案:
/**********************************************
解决方案:
任意一个5位数,比如:34256,把它的各位数字打乱,重新排列,可以得到一个最大的数:
解决方案:
65432,一个最小的数23456。求这两个数字的差,得:41976,把这个数字再次重复上述过程
解决方案:
(如果不足5位,则前边补0)。如此往复,数字会
解决方案:
落入某个循环圈(称为数字黑洞)。
解决方案:
请编写程序,找到5位数所有可能的循环圈,并输出,每个循环圈占1行。其中5位数全都相同则循环圈为[0],这个可以不考虑。循环圈的输出格式仿照:
解决方案:
[82962,75933,63954,61974]
解决方案:
http://bbs.bccn.net/thread-338031-1-1.html
解决方案:
author:zjcjav
解决方案:
*************************************************/#include<stdio.h>#include<stdlib.h>//排序voidsortNum(int*oldNum,int*bigNum){//printf("nsort方法:");inttemp=0;for(inti=0;i<5;i++){for(intj=0;j<4;j++)if(oldNum[j]>oldNum[j+1]){temp=oldNum[j+1];oldNum[j+1]=oldNum[j];oldNum[j]=temp;}}for(intk=0;k<5;k++){bigNum[k]=oldNum[4-k];//printf("%d",bigNum[k]);}//printf("n");}//转为数字intarrytoInt(int*arry){intnumber;number=arry[0]*10000+arry[1]*1000+arry[2]*100+arry[3]*10+arry[4];returnnumber;}//heidongintblackHol(intdig,int*allAnsw,intans){intsubSort[100],inNum[5],bigNum[5];inti=0,start=0;while(dig){for(intj=0;j<5;j++){inNum[j]=dig%10;//将数字保存在数组中dig=(dig-dig%10)/10;//printf("%d+++",num);//printf("%d+++",inNum[j]);}//printf("nsort方法:");sortNum(inNum,bigNum);subSort[i]=arrytoInt(bigNum)-arrytoInt(inNum);//printf("%d-%d=%dn",arrytoInt(bigNum),arrytoInt(inNum),subSort[i]);if(i==0)dig=subSort[i];//当开始时不会进入循环;因此要手动赋值for(intm=0;m<i;m++){//printf("subsort方法第%d%d次,subSort:%dn",i,m,subSort[i]);dig=subSort[i];//并把差赋给寻控制循环的bigif(subSort[m]==subSort[i])//找到循环圈{intisAs=0;start=m;//把下标赋给开始的值//printf("%dn",m);for(intn=0;n<ans;n++){if(allAnsw[n]==subSort[start])isAs++;}if(isAs==0)//和以前的答案作比较,不同则输出{allAnsw[ans++]=subSort[start];//把每个圈的开始数存入,printf("[");//输出结果for(;start<i;start++)printf("%d,",subSort[start]);printf("]n");break;}}}//if(start!=0)break;//控制外循环结束if(start!=0)break;i++;//printf("输出i的值%dn",i);}returnans;}voidmain(){intnum,allAnsw[100]={0},ans=0;//数字,答案集合,答案个数printf("*****************************************************************************n");printf("输入一个各个位都不相等的五位数如:(34256)!n");printf("任意一个5位数,把它的各位数字重新排列,可以得到一个最大的数:一个最小的数。n");printf("求这两个数字的差,得:41976,把这个数字再次重复上述过程。如此往复,数字会n");printf("得到一个循环圈,求出所有五位数的所有可能循环———————————n");printf("*****************************************************************************n");printf("*********************原题出自2010国信蓝点c语言题目******n");printf("*********************zjcjava完成于2011.4月******n");printf("*****************************************************************************nn");printf("所有情况如下:n");//sortNum(inNum,littNum);for(num=10000;num<=99998;num++){intdig=num;//printf("%d---",num);if(num%11111==0)continue;else{//调用//intdig=34256;ans=blackHol(dig,allAnsw,ans);//答案的个数返回/***********************************************************//*intsubSort[100],inNum[5],bigNum[5];intstart=0,i=0,j=0;;while(dig){printf("这是第%d次循环dig:%d---",i,dig);for(intj=0;j<5;j++){inNum[j]=dig%10;//将数字保存在数组中dig=(dig-dig%10)/10;//printf("%d+++",num);//printf("%d+++",inNum[j]);}//printf("nsort方法:");sortNum(inNum,bigNum);subSort[i]=arrytoInt(bigNum)-arrytoInt(inNum);printf("%d-%d=%dn",arrytoInt(bigNum),arrytoInt(inNum),subSort[i]);if(i==0)dig=subSort[i];for(intm=0;m<i;m++){printf("subsort方法第%d%d次,subSort:%dn",i,m,subSort[i]);dig=subSort[i];if(subSort[m]==subSort[i]){start=m;printf("%dn",m);printf("[");//输出结果for(;start<i;start++)printf("%d,",subSort[start]);printf("]n");break;}}if(start!=0)break;i++;}*//******************************************************/}}printf("所有循环圈的开始值:n");for(intn=0;n<ans;n++)printf("%dt",allAnsw[n]);}