7.1简单枚举
7.1.1 除法
输入整数n,从小到大的顺序输出所有形如abcde/fghij=n的表达式,其中a-j恰好为数字0-9的一个排列,2≤n≤79.
样例输入:
62
样例输出:
79546/01283=62
94736/01528=62
c源程序(编译器为Dev-C++):
#include <stdio.h>
#include <stdlib.h>
int test(int i,int j)
{
int a[11];
int k=0;
while(i!=0) //此程序最重要的地方也就是比较这十个数字各不相同,要用数组存起来
{
a[k++]=i%10;
i/=10;
}
while(j!=0)
{
a[k++]=j%10;
j/=10;
}
int flag;
if(k==9) flag=0; //有十个数,所以这里是9
int l;
for(k=0;k<10;k++)
for(l=k+1;l<10;l++)
if(!flag) //如果flag为0说明分母为四位,则第一位为0
if(a[k]==a[l]||a[k]==0) return 0;
else if(flag)
if(a[k]==a[l]) return 0;
return 1;
}
int main(int argc, char *argv[])
{
int i,n,m;
scanf("%d",&n);
for(i=1234;i<98765;i++) //i<=49876
{
m=i*n;
if(m>100000) break;
else if(test(m,i))
{
printf("%d/%05d=%d\n",m,i,n);
}
}
system("PAUSE"); //此语句为编译器自动生成
return 0;
}
若程序有不正确的地方或不够精简或您有更好的算法,欢迎您的指正和分享您的观点。让我们共同进步