UVA.725 Division (暴力)

来源:互联网 发布:java简单五子棋源代码 编辑:程序博客网 时间:2024/05/18 07:01

UVA.725 Division (暴力)

题意分析

找出abcdefghij分别是0-9(不得有重复),使得式子abcde/fghij = n。
如果分别枚举每个数字,就会有10^10,肯定爆炸,由于分数值已知,其实发现可以通过枚举分母,来计算出分子,然后再看看这些数字是否符合题意即可。
在枚举分母的时候,也可以根据条件过滤掉很多数字,我这里没有优化,直接暴力扫描1234-99999。

#include <iostream>#include <iostream>#include <cstdio>#include <algorithm>#include <cstring>#include <sstream>#include <set>#include <map>#include <queue>#include <stack>#include <cmath>#define nmax 200#define MEM(x) memset(x,0,sizeof(x))using namespace std;int digit[10];int n;int getdigit(int num){    int cnt = 0;    while(num){        cnt++;        num/=10;    }    return cnt;}bool caldigit(int num){    if(getdigit(num)<=4) digit[0]++;    else if(getdigit(num) >=6) return false;    while(num){        int t = num%10;        digit[t] ++;        num/=10;    }    for(int i = 0; i<=9; ++i){        if(digit[i] == 0) return false;        else if(digit[i] == 2) return false;    }    return true;}bool caldigiti(int num){    memset(digit,0,sizeof(digit));    if(getdigit(num)<=4) digit[0]++;    else if(getdigit(num) >=6) return false;    while(num){        int t = num%10;        digit[t] ++;        num/=10;    }    int cnt = 0;    for(int i = 0; i<=9;++i){        if(digit[i] == 2) return false;        else if(digit[i] == 1) cnt++;    }    if(cnt == 5) return true;    else return false;}void output(int a, int b){    int len1 = getdigit(a),len2 = getdigit(b);    for(int i = 5-len1; i>0 ; --i) printf("0");    printf("%d / ",a);    for(int i = 5-len2;i>0 ;--i) printf("0");    printf("%d = %d\n",b,n);}int main(){    //freopen("in.txt","r",stdin);    bool isfirst = true;    while(scanf("%d",&n) && n){        if(!isfirst) printf("\n");        int sta = 1234;bool isok = false;        for(int i = sta;i<=99999;++i){            if(caldigiti(i)){                int ans = n*i;                if(caldigit(ans)){                    output(ans,i);                    isok = true;                }            }        }        if(!isok) printf("There are no solutions for %d.\n",n);        if(isfirst) isfirst = false;    }    return 0;}
0 0
原创粉丝点击