Description
Write a program that finds and displays all pairs of 5-digit numbers thatbetween them use the digits
0 through
9 once each, such that thefirst number divided by the second is equal to an integer
N, where
.That is,
abcde / fghij = Nwhere each letter represents a different digit. The first digit of one ofthe numerals is allowed to be zero.
abcde / fghij = Nwhere each letter represents a different digit. The first digit of one ofthe numerals is allowed to be zero.
Input
Each line of the input file consists of a valid integer
N. An input of zero is to terminatethe program.
Output
Your program have to display ALL qualifying pairs of numerals, sorted byincreasing numerator (and, of course, denominator).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 mustwrite `` There are no solutions for N .". Separate the output for twodifferent values of N by a blank line.
xxxxx / xxxxx = N xxxxx / xxxxx = N..
In case there are no pairs of numerals satisfying the condition, you mustwrite `` There are no solutions for N .". Separate the output for twodifferent values of N by a blank line.
Sample Input
61 62 0
Sample Output
There are no solutions for 61. 79546 / 01283 = 62 94736 / 01528 = 62
分析:大水题啊,暴力破解,b从1234到50000,a=b×n,然后检查a和b的合法性(wa了7发,简直不敢想,就是那个点,点啊!)
#include <cstdio>
using namespace std;
int valid(int a, int b)
{
int va[10] = {0};
if(a<10000)va[0]=1;
while(a){va[a%10]=1;a/=10;}
while(b){va[b%10]=1;b/=10;}
for(int i=0; i<10; i++)if(!va[i])return 0;
return 1;
}
int main()
{
int n;
int first = 1;
while(~scanf("%d",&n)&&n)
{
int solu = 0;
if(first)first=0;
else putchar('\n');
for(int i=1234; i<50000; i++)
{
int fuck = i*n;
if(fuck>98765)break;
if(valid(i,fuck))
{
printf("%05d / %05d = %d\n",fuck,i,n);
solu = 1;
}
}
if(!solu)printf("There are no solutions for %d.\n",n);//这里有个点啊!
}
return 0;
}