c语言:卡布列克问题

请教c语言达人帮小弟找找下面程序的问题,20分奉上。
#include "stdio.h"
#include "conio.h"
void swap(int a,int b)
{int temp;
temp=a;
a=b;
b=temp;}

fun1(f,f1,f2,f3,f4)
int f,f1,f2,f3,f4;
{int n1,n2,n3,n4;
n1=f/1000;
n2=f/100%10;
n3=f/10%10;
n4=f%10;
f1=n1;f2=n2;f3=n3;f4=n4;}

kblk(int m)
{int a[4],i,j,x,y;
static int t;
if(m==6174) {printf("total times:%d",t);}
else
{ fun1(m,a[0],a[1],a[2],a[3]);
for(i=0;i<3;i++)
{for(j=i+1;j<4;j++)
{if(a[i]<a[j]) swap(a[i],a[j]);}}
x=a[0]*1000+a[1]*100+a[2]*10+a[3];
y=a[0]+a[1]*10+a[2]*100+a[3]*1000;
printf("%d-%d=%d",x,y,x-y);
t++;
kblk(x-y);}}

main()
{int n;
scanf("%d",&n);
if(n<1000||n>9999) printf("input error!");
else
kblk(n);
getch();
}
自己平常编程是有挺多细节不怎么注意,多谢各位指正。我把格式改对之后还是得不到结果,现在把原题目贴上,希望大家再帮忙改正改正。
验证卡布列克运算。任意的一个四位数,只要它们各个位上数字不全相同,就有这样的规律,其中三个步骤设计三个函数实现:

a) 将组成这个四位数的四个数字由大到小排列,形成由这四个数字构成的最大四位数。

b) 将组成这个四位数的四个数字由小到大排列,形成由这四个数字构成的最小四位数。(如果四个数字中有0,则得到的数不足四位)

c) 求两个数的差,得到一个新的四位数。

重复以上过程,最后得到的结果总是6174。

首先格式挺不规范~改进下对你有好处
没看意思~修改了一些语法~
#include "stdio.h"
#include "conio.h"
void swap(int *a,int *b)//交换数值要用指针
{int temp;
temp=*a;
*a=*b;
*b=temp;
}
int a[4];
fun1(int f)//你这函数用得很奇怪~改了~全部变量统一放
{int n1,n2,n3,n4;
n1=f/1000;
n2=f/100%10;
n3=f/10%10;
n4=f%10;
a[0]=n1;a[1]=n2;a[2]=n3;a[3]=n4;
}

void kblk(int m)//没有返回值要void,否则默认是int
{int i,j,x,y;
static int t=0;
if(m==6174) {printf("total times:%d",t);}
else
{ fun1(m);
for(i=0;i<3;i++)
{for(j=i+1;j<4;j++)
{ if(a[i]<a[j])
swap(&a[i],&a[j]);//注意这也要改
}
}
x=a[0]*1000+a[1]*100+a[2]*10+a[3];
y=a[0]+a[1]*10+a[2]*100+a[3]*1000;
printf("%d-%d=%d",x,y,x-y);
t++;
kblk(x-y);
}
}

main()
{int n;
scanf("%d",&n);
if(n<1000||n>9999) printf("input error!");
else
kblk(n);
getch();
}
看看是不是你想要的了
温馨提示:答案为网友推荐,仅供参考
第1个回答  2009-08-11
问题很多,首先fun1函数定义有问题,应该写成fun1(int f,int f1,int f2,int f3,int f4)其次,求千位、百位、十位、个位数字的时候有错误n2=f%1000/100;n3=f%100/10;还有,在kblk函数中a[4]未做初始化就引用。交换函数swap也不对,应该写成void swap(int &a,int &b)。你那样写,达不到交换目的。自己再改改吧。
第2个回答  2009-08-13
2楼正解,但你最好在
x=a[0]*1000+a[1]*100+a[2]*10+a[3];
y=a[0]+a[1]*10+a[2]*100+a[3]*1000;
printf("%d-%d=%d",x,y,x-y);
后加上句:
printf("\n");
就很清楚了
相似回答