#include<stdio.h>
int sub(int i)
{
int p,k,j,h,max,min,a[4]
a[1]=i/100
a[2]=(i/10)%10a[3]=i%10
for(k=1k<=2k++)
for(j=k+1j<=3j++)
if(a[k]<a[j])
{ h=a[k]a[k]=a[j]a[j]=h}
max=a[1]*100+a[2]*10+a[3]
min=a[3]*100+a[2]*10+a[1]
p=max-min
if(p<100 &&p/10==p%10) p=0
return (p)
}
int main()
{
int n,n1,y,i,m
printf("\n验证任意3位数'重排求差' *** 作,可于495或0.")
for(y=0,n=101n<=999n++) //修改n的取值范围,可求出最多的转换次数
{
i=nm=0
while(i!=495 &&i!=0)
{ i=sub(i)m++}
if(m>y) { y=mn1=n}
}
printf("\n 当n=%d时,最多转换%d次可至495或0:",n1,y)
printf("\n %d",n1)
i=n1
while(i!=495 &&i!=0)
{ i=sub(i)printf("->%d",i)}
return 0
}
上面的回答很正确,要改一下这儿:
if(a>b)swap(&a,&b)
if(a>c)swap(&a,&c)
if(b>c)swap(&b,&c)
此程序就是输入一个3位数,然后,把该三位数的3个数字变换顺序使变成最小的数和最大的数,输出两者之差,然后把这个差中的3位数调换顺序,使之变成最小的数和最大的数,再把两者的差值输出。比如说输入数为123,则第一个数为:321-123=198,第二个数为:981-189=792,第三个数为:972-279=693,第四个数为:963-369=594,以此类推,直到输出8个数为止。
#include<stdio.h>
int main(void)
{
int number,x,y,a,b,c,t,i,max,min,mid
scanf("%d",&number)i=1
while(number!=495){
a=number/100
b=number%100/10
c=number%10
mid=a+b+c
max=a>b?a:b max=max>c?max:c
min=a>b?b:a min=min>c?c:min
mid=mid-min-max
x=max*100+mid*10+min
y=min*100+mid*10+max
/*---------*/
number=x-y
printf("%d: %d - %d = %d\n",i,x,y,number)
i++
}
return 0
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)