标签:
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 2<=N<=79. 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
分析:如果将abcde与fghij都枚举出来会超时,所以只枚举fghij再用N乘以它就可以得到abcde,在判断a-j中各个数字都不同就可以了。
#include <iostream>
#include <cstdio>
using namespace std;
int used[10];
int image(int x,int y)
{
if(y>98765)
return 0;
for(int i=0;i<10;i++)
used[i]=0;
if(x<10000)
used[0]=1;
while(x)
{
used[x%10]=1;
x/=10;
}
while(y)
{
used[y%10]=1;
y/=10;
}
int sum=0;
for(int i=0;i<10;i++)
sum+=used[i];
return (sum==10);
}
int main()
{
int n,t=0;
while(scanf("%d",&n)==1&&n)
{
int flag=0;
if(t++)
printf("\n");
for(int i=1234;i<100000;i++)
{
if(image(i,i*n))
{
printf("%05d / %05d = %d\n",i*n,i,n);
flag=1;
}
}
if(!flag)
printf("There are no solutions for %d.\n",n);
}
}
标签:
原文地址:http://www.cnblogs.com/xl1164191281/p/4696693.html