求助 c语言编程 用0-9组合成满足条件的两个5位数问题

来源:百度知道 编辑:UC知道 时间:2024/05/09 07:36:57
题目:用0-9数字不重复的组合出两个5位数,满足两个数的值相差20085.
不知道这个各位数字不相同在双层for语句中要怎么表达,或者有其他更好算法,请大家指点~~
#include<stdio.h>

main()
{
int x,a[11],i,j;
int y;
for(x=12345;x<=79915;x++)
{
a[1]=x/10000;
a[2]=x/1000%10;
a[3]=x/100%10;
a[4]=x/10%10;
a[5]=x%10;

for(y=32430;y<=98765;y++)
{
a[6]=y/10000;
a[7]=y/1000%10;
a[8]=y/100%10;
a[9]=y/10%10;
a[10]=%10;
if((y-20085)==x)
{
for(i=1;i<=5;i++)
{
for(j=2;j<=10-i;n++)
{ if (a[i]==a[j])) break ;

修改了一下,10个数不重复的
//我写了个,你看对不对
#include<stdio.h>
int test(int n,int m) //判断是否10位不重复
{ int i=0,j=0;
int a[10];
for(i=0;i<5;i++) //将各位数字存于数组a
{ a[i]=n%10;
n/=10;
}
for(i=5;i<10;i++)
{ a[i]=m%10;
m/=10;
}
for(i=0;i<9;i++) //有重复则返回 0
for(j=i+1;j<10;j++)
if(a[i]==a[j]) return 0;
return 1;
}
void main()
{ int i=0,count=0;
for(i=10234+20085;i<98765;i++) //最小的10234 ,最大98765
if(test(i,i-20085)) //两个数不重复且相差20085则输出
{ count++;
printf("%5d %d-%d=20085\n",count,i,i-20085);
}
}

你把x求各位数改为,下面y的也是这样改。
a[1]=x/10000;
a[2]=x%10000/1000;
a[3]=x%1000/100;
a[4]=x%100/10;
a[5]=x%10;