Description
Write a program that finds and displays all pairs of 5-digit numbers that between them use the digits 0 through 9 once each, such that the first number divided by the second is equal to an integer N, where . That is,
abcde / fghij =N
where each letter represents a different digit. The first digit of one of the numerals is allowed to be zero.
Your output should be in the following general form:
xxxxx / xxxxx =N
xxxxx / xxxxx =N
.
.
In case there are no pairs of numerals satisfying the condition, you must write ``There are no solutions for N.". Separate the output for two different values of N by a blank line.
61 62 0
There are no solutions for 61. 79546 / 01283 = 62 94736 / 01528 = 62
題意:
輸入正整數n,按從小到大的順序輸出所有形如abcde/fghij=n的表達式,其中a—j恰好為數字0—9的一個排列(可以有0前導) 2=<n<=79
思路:
可以用五層循環,但是過程有些繁瑣
也可只枚舉fghij就可以算出abcde,然後判斷符不符合條件。
#include<stdio.h>
int p[15];
int juge(int a, int b) //判斷出符合條件的a,b,把a,b每一位都標記一次
{
if (a > 98765)
return 0;
for (int i = 0; i < 10; i++)
{
p[i] = 0;
}
if (b<10000)
p[0]=1;
while(a)
{
p[a%10] = 1; //判斷每一位,然後標記
a/= 10;
}
while(b)
{
p[b%10] = 1;
b/=10;
}
int total = 0;
for (int i = 0; i < 10; i++)
total+=p[i];
return total==10; //直到有符合條件的不同的十個數字
}
int main()
{
int n, m = 0;
while (scanf("%d", &n) == 1, n)
{
if (m>0) printf("\n");m++; //輸出格式要求
int f = 1;
for (int i = 1234; i < 99999; i++) //范圍應該很好想出
{
if (juge(i*n,i))
{
printf("%d / %05d = %d\n", i*n,i,n); //格式控制輸出,五位數如果缺就用0補上
f =0;
}
}
if (f)
{
printf("There are no solutions for %d.\n",n);
}
}
return 0;
}