您的位置:首页 > 其它

例题7-1 UVA 725 Division除法

2015-12-20 23:14 246 查看
思路不太好,借鉴一下吧

整体思路:分析可知第一个数肯定是个五位数,第二位要么是五位数,要么是四位数,所以呢,第一个循环直接扫第一个五位数,从10000扫到99999只有当五个数字各不相同,并且通过除法算出第二个数,判断两个数各个数字都不相同即可输出:

#include<cstdio>
#include<string.h>
using namespace std;
const int maxn = 10;

int judge(int num){
int cont = 0,flag[maxn] = {0};
while(num != 0){
int a = num % 10;
flag[a] = 1;
num /= 10;
}
for (int i = 0; i < maxn; ++i)if (flag[i])cont++;
if (cont == 5)return 1;
if (cont == 4 && !flag[0])return 2;
return 0;
}
int judge2(int num1,int num2){
int flag[maxn] = {0},cont = 0;
while(num1 != 0){
int a = num1 % 10;
flag[a]++;
num1 /= 10;
}
while(num2 != 0){
int a = num2 % 10;
flag[a]++;
num2 /= 10;
}
for (int i = 0; i < maxn; ++i){
if (flag[i] != 1)cont++;
}
if (cont == 1 && !flag[0])return 2;
if (cont)return 0;
if (!cont)return 1;
return 0;
}
int main()
{
int N,cont2 = 0,cont = 0;
while (scanf("%d",&N) == 1 && N){
cont2++;
cont = 0;
if (cont2 > 1)printf("\n");
for (int i = 10000; i < 99999; ++i){
if (judge(i) == 1){//1 is 5   2 is 4,0 is no!
int num2 = i / N;
if (judge2(i,num2) && N * num2 == i){
cont++;
if (judge2(i,num2) == 1)printf("%d / %d = %d\n",i,num2,N);
else printf("%d / 0%d = %d\n",i,num2,N);
}
}

}
if (!cont)printf("There are no solutions for %d.\n",N);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: