C语言题目,具体如下 5
假设你有一个各位数字互不相同的四位数,把所有数字从大到小排序后得到a,从小到大排序后得到b,然后用a-b替换原来的数,并且继续操作。例如,从1234出发,依次可以得到4321-1234=3087、8730-378=8352、8532-2358=6174.有趣的是,7641-1467=6174,回到了它自己。输入一个n位数,输出操作序列,直到出现循环(即新得到的数曾经得到过).输入保证在循环之前最多只会产生1000个整数。
输入样例
1234
输出样例
1234->3087->8352->6174->6174 展开
#include<stdio.h>
main()
{
while(1)
{
int n,i,j,min,max,t,x;
char k[4];
printf("请输入一个四位数且各个位上的数都不相同: ");
scanf("%d",&n);//获取输入的数值
printf("%d→",n);//输出第获取的值
k[0]=n%10;//得到各个位上的数值
k[1]=n/10%10;
k[2]=n/100%10;
k[3]=n/1000;
for(i=0;i<=3;i++)//给各个位上的数字排序
for(j=0;j<4;j++)
{
if(k[i]>k[j])
{
t=k[i];
k[i]=k[j];
k[j]=t;
}
}
max=k[0]*1000+k[1]*100+k[2]*10+k[3];//得到最大值
min=k[3]*1000+k[2]*100+k[1]*10+k[0];//得到最小值
if(n==max-min)//将最大值域最小值的差与输入值相比较,相同则输出,不相同则,再排序比较
printf("%d",n);
else for(i=0;i<1000;i++)//最多循环1000次直至满足条件
{
x=max-min;
k[0]=x%10;//得到各个位上的数值
k[1]=x/10%10;
k[2]=x/100%10;
k[3]=x/1000;
for(i=0;i<=3;i++)//给各个位上的数字排序
for(j=0;j<4;j++)
{
if(k[i]>k[j])
{
t=k[i];
k[i]=k[j];
k[j]=t;
}
}
max=k[0]*1000+k[1]*100+k[2]*10+k[3];//得到最大值
min=k[3]*1000+k[2]*100+k[1]*10+k[0];//得到最小值
if(x==max-min)//将最大值和最小值的差与输入值相比较,相同则输出且终止循环,不相同则输出,并继续循环
{
printf("%d\n",x);
break;
}
else
printf("%d→",x);
}
}
}
2013-12-31 · 知道合伙人软件行家
#include <stdio.h>
int sort(int n, bool falg)//如果falg为真,便正序输出,否则反序
{
char a[5], t;
sprintf(a, "%d", n);
for(int i= 0; i < 4; i++)
{
for(int j= 0; j < 4; j++)
{
if(a[i] > a[j])
{
t= a[i];
a[i]= a[j];
a[j]= t;
}
}
}
if(falg)
{
for(int i= 0; i < 2; i++)
{
t= a[i];
a[i]= a[3-i];
a[3-i]= t;
}
}
sscanf(a, "%d", &n);
return n;
}
void main()
{
int n, m;
printf("input a num:");
scanf("%d", &n);
while(true)
{
printf("%d->", n);
m= n;
n= sort(n, 0) - sort(n, 1);
if(m == n)
break;
}
printf("%d\n", n);
}
不懂。。。
这个是要用指针做吧?我对指针掌握的比较差。。思路是有,刚尝试写了一堆,但是最后还是写不出来
不用指针!明天给你代码!