nyoj 57 6174问题
2015-01-03 19:58
211 查看
6174问题
时间限制:1000 ms | 内存限制:65535 KB
难度:2
描述
假设你有一个各位数字互不相同的四位数,把所有的数字从大到小排序后得到a,从小到大后得到b,然后用a-b替换原来这个数,并且继续操作。例如,从1234出发,依次可以得到4321-1234=3087、8730-378=8352、8532-2358=6174,又回到了它自己!现在要你写一个程序来判断一个四位数经过多少次这样的操作能出现循环,并且求出操作的次数
比如输入1234执行顺序是1234->3087->8352->6174->6174,输出是4
输入第一行输入n,代表有n组测试数据。
接下来n行每行都写一个各位数字互不相同的四位数输出经过多少次上面描述的操作才能出现循环样例输入1
1234
样例输出4
#include<stdio.h>
int main()
{
int n;int a[6],i,j,max,min,m=0,d,t,k;
scanf("%d",&n);
while(n--)
{
scanf("%d",&m);
for(i=1;;i++)
{
a[1]=m/1000;
a[2]=m/100%10;
a[3]=m/10%10;
a[4]=m%10;
for(k=1;k<=4;k++)
for(j=k+1;j<=4;j++)
if(a[k]>a[j])
{
t=a[k];
a[k]=a[j];
a[j]=t;
}
min=a[1]*1000+a[2]*100+a[3]*10+a[4];
max=a[4]*1000+a[3]*100+a[2]*10+a[1];
d=max-min;
if(m==d)
break;
else
m=d;
}
printf("%d\n",i);
}
return 0;
}
时间限制:1000 ms | 内存限制:65535 KB
难度:2
描述
假设你有一个各位数字互不相同的四位数,把所有的数字从大到小排序后得到a,从小到大后得到b,然后用a-b替换原来这个数,并且继续操作。例如,从1234出发,依次可以得到4321-1234=3087、8730-378=8352、8532-2358=6174,又回到了它自己!现在要你写一个程序来判断一个四位数经过多少次这样的操作能出现循环,并且求出操作的次数
比如输入1234执行顺序是1234->3087->8352->6174->6174,输出是4
输入第一行输入n,代表有n组测试数据。
接下来n行每行都写一个各位数字互不相同的四位数输出经过多少次上面描述的操作才能出现循环样例输入1
1234
样例输出4
#include<stdio.h>
int main()
{
int n;int a[6],i,j,max,min,m=0,d,t,k;
scanf("%d",&n);
while(n--)
{
scanf("%d",&m);
for(i=1;;i++)
{
a[1]=m/1000;
a[2]=m/100%10;
a[3]=m/10%10;
a[4]=m%10;
for(k=1;k<=4;k++)
for(j=k+1;j<=4;j++)
if(a[k]>a[j])
{
t=a[k];
a[k]=a[j];
a[j]=t;
}
min=a[1]*1000+a[2]*100+a[3]*10+a[4];
max=a[4]*1000+a[3]*100+a[2]*10+a[1];
d=max-min;
if(m==d)
break;
else
m=d;
}
printf("%d\n",i);
}
return 0;
}
相关文章推荐
- nyoj题目57:6174问题
- NYOJ-57:6174问题
- NYOJ 57 6174问题
- NYOJ 57 6174问题
- NYOJ 57 6174问题
- NYOJ 57(6174问题)
- NYOJ 57 6174问题
- nyoj_57 6174问题
- nyoj57 6174问题
- NYOJ:57-6174问题
- NYOJ57 6174问题
- NYOJ-57-6174问题-2013年6月29日11:28:02
- NYOJ-6174问题-57
- NYOJ 57 6174问题
- NYOJ 57 6174问题
- NYOJ 57 6174问题
- [原]NYOJ-6174问题-57
- NYOJ-57-6174问题-2013年6月29日11:58:06
- NYOJ-57 6174问题
- nyoj 57 6174问题