编写一个C语言程序

求大神帮忙:编写一个程序:对任意4个数字,由这4个数字组成的最大4位数减去最小4位数,对结果(如果不足4位数的,加0凑足4位)进行同样的操作,直到这4个数字的组合不再变化为止。要求用递归函数实现,并输出所有可能的4个数字组合。

先附上图片,程序在下面:

#include <stdio.h>

int main()

{

void f1(int x[],int n);

int i,a[4];

printf("请输入4个整数:");

for (i=0;i<4;i++)

scanf("%d",&a[i]);

f1(a,4);

return 0;

}

void f1(int x[],int n)

{

int temp;

int i=0,j=0,y=0,z=0,num=0;

static last=0;

for(;j<3;j++)

for(;i<3-j;i++)

if (x[i]>x[i+1])

{temp=x[i];x[i]=x[i+1];x[i+1]=temp;}

for(i=0;i<4;i++)

{ y=10*y+x[3-i];

z=10*z+x[i];

}

num=y-z;

printf("最大值=%d,最小值=%d,相减后=%d\n",y,z,num);

if(num!=last)

{ last=num;

for(i=0;i<4;i++)

{ x[i]=num%10;num/=10; }

f1(x,4);            //这里是条件递归,if成立则调用自身函数。

}

}

追答

已写,那个问题用指针变量指向函数地址就ok了。
记得采纳,亲。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2016-01-10

1、使用c-free5的标准c写一个经典示例如下:

#include <stdio.h>
int main()
{
printf("Hello world!\n");

}

2、此程序向dos或控制台窗口输出Hello world!

第2个回答  2015-05-04
#include "stdio.h"
#include "conio.h"

void swap(int *m,int *n){
int x;
x=*m;*m=*n;*n=x;
}

int chuli(int x){
int a[4],n=x;
int i,j,max=0,min=0;
n=(n>0)?n:-n;
for(i=0;i<4;i++){
a[i]=n%10;
n=n/10;
}
for(i=0;i<3;i++)
for(j=i+1;j<4;j++)
if (a[i]<a[j]) swap(&a[i],&a[j]);
for(i=0;i<4;i++){
max=max*10+a[i];
min=min*10+a[3-i];
}
if (max-min==x)
return(x);
else
return(chuli(max-min));
}

main()
{
int i,k=0;
int tongji[10000];
for(i=0;i<10000;i++) tongji[i]=0;
for(i=0;i<10000;i++)
tongji[chuli(i)]=1;
for(i=1000;i<10000;i++)
if(tongji[i]==1){
printf("%5d",i);
k=k+1;
if (k%10==0) printf("\n");
}
getch();
}追问

为什么运行结果始终是6174,而不是一组数字呢?

追答

因为只有一个组合,没有其它组合了,
如果从0开始,那么有2个,一个是0 另一个就是6174

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网