蓝桥杯高职组2011_10题

任意一个5位数,比如:34256,把它的各位数字打乱,重新排列,可以得到一个最大的数:65432,一个最小的数23456。求这两个数字的差,得:41976,把这个数字再次重复上述过程(如果不足5位,则前边补0)。如此往复,数字会落入某个循环圈(称为数字黑洞)。 
比如,刚才的数字会落入:[82962, 75933, 63954, 61974] 这个循环圈。  
请编写程序,找到5位数所有可能的循环圈,并输出,每个循环圈占1行。其中5位数全都相同则循环圈为 [0],这个可以不考虑。循环圈的输出格式仿照: 
[82962, 75933, 63954, 61974] 

其中数字的先后顺序可以不考虑。

#include <stdio.h>
#include <stdlib.h>


int cmp(const void *a,const void *b){
    return *(int *)a - *(int *)b;
}


int blackHole(int n){
    int a,b,c,d,e;
    a = n/10000;
    b = n%10000/1000;
    c = n%1000/100;
    d = n%100/10;
    e = n%10;
    int in[5],i,j,max;
    in[0] = a;
    in[1] = b;
    in[2] = c;
    in[3] = d;
    in[4] = e;
    qsort(in,5,sizeof(int),cmp);//排序 
    int tmp = in[4]*10000+in[3]*1000+in[2]*100+in[1]*10+in[0]-//最大最小数的差 
              in[0]*10000-in[1]*1000-in[2]*100-in[3]*10-in[4];
    printf("%d\n",tmp);
    getchar();//方便测试数据,按两下空格显示下一个 
    getchar();
    blackHole(tmp);//递归 



int main(){
  int n;
  scanf("%d",&n);
  blackHole(n);
}

文章由http://www.400815.com原创,转载请注明。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值