标签:uva
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
题目大意:
如样例所示。
解题思路:
暴力枚举。从分母下手找分子更快,还有就是用到sprintf函数更简单的判断是否重。
代码:
#include<iostream> #include<cstdio> #include<string> #include<cstring> using namespace std; int n,num,den; char buffer[20]; bool visited[10]; bool haveCommonElement(int a,int b){ int temp; sprintf(buffer,"%05d%05d",a,b);//这里的buffer要为char,不能为string. memset(visited,false,sizeof(visited)); for(int i=0;i<strlen(buffer);i++){ temp=buffer[i]-'0'; if(visited[temp]) return true; else visited[temp]=true; } return false; } int main(){ int casen=0,flag; while(scanf("%d",&n)!=EOF&&n){ if(casen>0) printf("\n"); casen++;flag=0; for(int den=1234;den<100000;den++){//分子控制在5个宽度内,所以要小于100000. if(den%n==0){//之前用已知分子求分母,耗时太多,改用已知分母求分子后,因为只有整除时才进入子函数,所以效率提高了许多. num=den/n; if(!haveCommonElement(num,den)){ printf("%05d / %05d = %d\n",den,num,n); flag=1; } } } if(flag==0) printf("There are no solutions for %d.\n",n); } return 0; }
UVA 725 Division ( 找出 abcde / fghij = N的形式—— 暴力枚举 ),布布扣,bubuko.com
UVA 725 Division ( 找出 abcde / fghij = N的形式—— 暴力枚举 )
标签:uva
原文地址:http://blog.csdn.net/hush_lei/article/details/38586537