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 = Nxxxxx / 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 = Nxxxxx / 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;
}

本文介绍了一个编程挑战,任务是找出所有符合条件的五位数对,其中一个数除以另一个数等于给定整数N,且两个数合起来恰好使用0到9的所有数字一次。文章提供了完整的C++代码实现,并解释了其基本思路。
503

被折叠的 条评论
为什么被折叠?



