标签:
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; }
标签:
原文地址:http://www.cnblogs.com/hfc-xx/p/4681247.html