| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1346 人关注过本帖
标题:任意一个5位数,比如:34256,把它的各位数字打乱,重新排列
只看楼主 加入收藏
huwengui
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:166
专家分:158
注 册:2011-4-22
结帖率:83.33%
收藏
已结贴  问题点数:10 回复次数:1 
任意一个5位数,比如:34256,把它的各位数字打乱,重新排列
任意一个5位数,比如:34256,把它的各位数字打乱,重新排列,可以得到一个最大的数:65432,一个最小的数23456。求这两个数字的差,得:41976,把这个数字再次重复上述过程(如果不足5位,则前边补0)。如此往复,数字会落入某个循环圈(称为数字黑洞)。
比如,刚才的数字会落入:[82962, 75933, 63954, 61974] 这个循环圈。

请编写程序,找到5位数所有可能的循环圈,并输出,每个循环圈占1行。其中5位数全都相同则循环圈为 [0],这个可以不考虑。循环圈的输出格式仿照:
[82962, 75933, 63954, 61974]
其中数字的先后顺序可以不考虑。
自己只写了一小部分
#include "stdio.h"
int m(int a,int b,int c,int d,int e)
{ int i,j,x[5]={a,b,c,d,e},temp;
 for(i=0;i<4;i++)
  for(j=i+1;j<5;j++)
  {     if(x[i]<x[j])
     {temp=x[i];
     x[i]=x[j];
     x[j]=temp;
     }
  }
     return x[0]*10000+x[1]*1000+x[2]*100+x[3]*10+x[4];

}
int n(int a,int b,int c,int d,int e)
{ int i,j,x[5]={a,b,c,d,e},temp;
 for(i=0;i<4;i++)
      for(j=i+1;j<5;j++)
     {if(x[i]<x[j])
        { temp=x[i];
        x[i]=x[j];
        x[j]=temp;
        }
        }
     return x[4]*10000+x[3]*1000+x[2]*100+x[1]*10+x[0];

}
main()
{
    int num,a,b,c,d,e,i=0,cha,max=0,min=0,k=0;
 scanf("%d",&num);
 while(num){

 a=num/10000;
 b=num%10000/1000;
 c=num%1000/100;
 d=num%100/10;
 e=num%10;
max=m(a,b,c,d,e);
min=n(a,b,c,d,e);
//printf("%d  ",max);
//printf("%d  ",min);
cha=max-min;
printf("%d ",cha);
i++;
if(i==10) break;
num=cha;
 }
}

[ 本帖最后由 huwengui 于 2011-4-27 08:57 编辑 ]
搜索更多相关主题的帖子: 编写程序 最大的 
2011-04-26 23:00
唯我独魔
Rank: 8Rank: 8
等 级:蝙蝠侠
帖 子:176
专家分:782
注 册:2011-4-13
收藏
得分:10 
#include<stdio.h>
int max(int);
int min(int);
int search(const int*a,int n);
int main(void)
{
    int num,i=0,temp;
    int a[1000];
    scanf("%d",&num);
    a[0]=num;
   while(!search(a,i))
   {
       num=max(num)-min(num);
       i++;
       a[i]=num;
   }
   printf("%d ",a[i]);
   temp=a[i];
     num=max(num)-min(num);
       i++;
       a[i]=num;
 while(a[i]!=temp)
 {
     printf("%d ",a[i]);
      num=max(num)-min(num);
       i++;
       a[i]=num;
 }
 return 0;
}
int max(int a)
{
    int k[5];
    int change;
    int i,j;
    k[0]=a%10;
    k[1]=(a/10)%10;
    k[2]=(a/100)%10;
    k[3]=(a/1000)%10;
    k[4]=a/10000;
    for(i=0;i<5;i++)
        for(j=i+1;j<5;j++)
            if(k[i]>k[j])
            {
                change=k[i];
                k[i]=k[j];
                k[j]=change;
            }
            return(k[4]*10000+k[3]*1000+k[2]*100+k[1]*10+k[0]);
}
int min(int a)
{
    int k[5];
    int change;
    int i,j;
    k[0]=a%10;
    k[1]=(a/10)%10;
    k[2]=(a/100)%10;
    k[3]=(a/1000)%10;
    k[4]=a/10000;
    for(i=0;i<5;i++)
        for(j=i+1;j<5;j++)
            if(k[i]<k[j])
            {
                change=k[i];
                k[i]=k[j];
                k[j]=change;
            }
            return(k[4]*10000+k[3]*1000+k[2]*100+k[1]*10+k[0]);
}
int search(const int*a,int n)
{
    int i;
    for(i=0;i<n;i++)
       if(a[n]==a[i])
            return 1;
    return 0;
}

   
2011-04-27 12:44
快速回复:任意一个5位数,比如:34256,把它的各位数字打乱,重新排列
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.025598 second(s), 7 queries.
Copyright©2004-2025, BCCN.NET, All Rights Reserved