题目:
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
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
个人理解:
数字分离和排序问题,题目不是很麻烦,我选择了最简单的交换法进行排序...
代码<C语言>
#include<stdio.h>
#include<math.h>
int main()
{
int x,n,i,j,y,z=0,temp,count=0,w=4;
int a[4];
scanf("%d",&n);
while(n--)
{
scanf("%d",&x);
//while(1)
//{
//z=x;
while(1){
if(z==0) //保证x只能向z进行赋值一次
{
z=x;
}
a[0]=z/1000; //分离数 字
#include<math.h>
int main()
{
int x,n,i,j,y,z=0,temp,count=0,w=4;
int a[4];
scanf("%d",&n);
while(n--)
{
scanf("%d",&x);
//while(1)
//{
//z=x;
while(1){
if(z==0) //保证x只能向z进行赋值一次
{
z=x;
}
a[0]=z/1000; //分离数 字
a[1]=(z/100)%10;
a[2]=z/10-100*a[0]-10*a[1];
a[3]=z%10;
/* while(w--)
{
printf("排序前%d\n",a[w]);
}*/
for(i=0;i<3;i++) //进行排序
{
for(j=i+1;j<4;j++)
{
if(a[i]<a[j])
{
temp=a[i];
a[i]=a[j];
a[j]=temp;
}
}
// printf("排序后%d\n",a[i]);
}
x=1000*a[0]+100*a[1]+10*a[2]+a[3];
//printf("x的值为:%d\n",x);
y=1000*a[3]+100*a[2]+10*a[1]+a[0];
// printf("y的值为:%d\n",y);
z=x-y;
// printf("z的值为:%d\n",z);
//sqrt(i);
count++;
if(z==6174)
break;
}//while(z=6174);
printf("%d\n",count+1);
z=count=0; //计数器清零 z也要清零
}
//}
}
a[2]=z/10-100*a[0]-10*a[1];
a[3]=z%10;
/* while(w--)
{
printf("排序前%d\n",a[w]);
}*/
for(i=0;i<3;i++) //进行排序
{
for(j=i+1;j<4;j++)
{
if(a[i]<a[j])
{
temp=a[i];
a[i]=a[j];
a[j]=temp;
}
}
// printf("排序后%d\n",a[i]);
}
x=1000*a[0]+100*a[1]+10*a[2]+a[3];
//printf("x的值为:%d\n",x);
y=1000*a[3]+100*a[2]+10*a[1]+a[0];
// printf("y的值为:%d\n",y);
z=x-y;
// printf("z的值为:%d\n",z);
//sqrt(i);
count++;
if(z==6174)
break;
}//while(z=6174);
printf("%d\n",count+1);
z=count=0; //计数器清零 z也要清零
}
//}
}