天天看点

例题7-1 UVA 725 Division除法

思路不太好,借鉴一下吧

整体思路:分析可知第一个数肯定是个五位数,第二位要么是五位数,要么是四位数,所以呢,第一个循环直接扫第一个五位数,从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;
}
           

继续阅读