Uva 725 除法

Posted 树的种子

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Uva 725 除法相关的知识,希望对你有一定的参考价值。

紫书P182

直接枚举 0~9 的全排列会超时,枚举fghij就可以了,计算出 abcde ,这里有一个新的函数,也可以不用咯,把每一位数据提取出来,while循环可以做到,这里的新的函数是,sprintf(buf,"%5d%5d",abcde,fghij); 格式化提取,把abcde,fghij每一位提取到字符串buf中,不足5位的补0。然后看每一个位是否都有。都有就是一个0~9的全排列。

/*#include <stdio.h>
#include <algorithm>

using namespace std;

int main()
{
    int n;
    int a[10] = {0,1,2,3,4,5,6,7,8,9};
    while(scanf("%d",&n),n) {

        bool flag = false;
        do {

            int s = 0;
            for(int i=0;i<5;i++) {
                s = s*10 + a[i];
            }
            int t = 0;
            for(int i=5;i<10;i++) {
                t = t*10 + a[i];
            }
            if(s%t==0&&s/t==n) {
                flag = 1;
                printf("%d%d%d%d%d / %d%d%d%d%d = %d\\n",a[0],a[1],a[2],a[3],a[4],a[5],a[6],a[7],a[8],a[9],n);
            }

        }while(next_permutation(a,a+10));

        if(!flag)
            printf("There are no solutions for %d.\\n",n);

    }

    return 0;
}
*/

#include <cstdio>
#include <cstring>
#include <algorithm>

using namespace std;

int main() {

    //freopen("in.txt","r",stdin);
    int n;
    int kase = 0;
    char buf[99];
    while(scanf("%d",&n),n) {

        if(kase++)
            printf("\\n");
        int cnt = 0;
        for(int fghij = 1234;;fghij++) {
            int abcde = fghij*n;
            sprintf(buf,"%05d%05d",abcde,fghij);
            if(strlen(buf)>10) break;
            sort(buf,buf+10);
            bool ok = true;
            for(int i=0;i<10;i++) {
                if(buf[i]!=\'0\'+i) ok = false;
            }

            if(ok) {
                cnt++;
                printf("%05d / %05d = %d\\n",abcde,fghij,n);
            }


        }
        if(!cnt)
            printf("There are no solutions for %d.\\n",n);

    }


    return 0;
}
View Code

 

以上是关于Uva 725 除法的主要内容,如果未能解决你的问题,请参考以下文章

UVA725 除法 (Division )

uva725

Division UVa725

UVA725

uva 725 Division

UVA 725 Division