UVa 725 - Division(枚举简单题)

今日无事,写篇日记。这是我写的第一道uva题(uva是算法竞赛入门经典里使用例题的题目来源),正值暑假,前几天看了书上中文题目和解析,玩了几日san11,又重拾起acm,今天晚上写了一下还是花了点时间。

题目:给你一个数字n,用0~9,10个数字组成两个五位数,使得他们的商为n,按顺序输出所有结果。

1.这里的除法不是c中的除(/)而是整除,一开始以为是整除,但那样79546 / 01283 = 62是一组解,79546+1 / 01283 = 62也是一组解了。

2.复杂度:枚举分子然后分子乘该数,而不是每位数都枚举,复杂度从10!变为10000-1234(本来我想每位枚举的即10!/5!实现起来不会!)

3.判断一起放在函数里

for(int i=1234;i<100000;i++){
if(judge(i,n*i)){//这一句本来有条件判断n*i<10000就不执行,但这样没有条理,应该放到judge函数里
flag=1;
printf("%05d / %05d = %d\n",n*i,i,n);
}
}

4.题目有输出有一个坑点,udbug的hint里看到

NOTES:Print a blank line between test cases - not after each test case. (So, there should not be a blank line printed after the last test case.) Printing a blank line after each test case will result in a verdict of wrong answer on UVa Online Judge.

最后不能有空行

5.使用udebug 和 vitual judge,这个学期困于找不到bug又没有错误数据,本来想做一个app通过比较输出来找错误的数据,然而水平有限又在学大物,现在发现了已有的udebug(虽然只提供几个OJ)。hust的vitual judge可以解决只有FQ才能上的uva

6.文件输出 freopen("test.out","w",stdout); 输出数据在test.out里,学习了

#include<stdio.h>
int judge(int a,int b){
    if(b>=100000||b<10000)
    return false;
    int used[10];
    for(int i=0;i<10;i++){
        used[i]=0;
    }
    if(a<10000)
    used[0]=1;
    while(a){
        used[a%10]=1;
        a/=10;
    }
    while(b){
        used[b%10]=1;
        b/=10;
    }
    for(int i=0;i<10;i++){
        if(used[i]==0)
        return false;
    }
    return true;
}

int main(){
    //freopen("test.out","w",stdout);
    int n,flagl=0,flag;
    while(scanf("%d",&n)&&n!=0){
        if(flagl++)
        printf("\n");

        flag=0;
        for(int i=1234;i<100000;i++){
            if(judge(i,n*i)){
                flag=1;
                printf("%05d / %05d = %d\n",n*i,i,n);
            }
        }
        if(!flag)
        printf("There are no solutions for %d.\n",n);

    }
    getchar();
    return 0;
}
时间: 2024-10-07 06:18:43

UVa 725 - Division(枚举简单题)的相关文章

UVa 725 Division --- 简单枚举

题目链接: https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=666 /* UVa 725 Division --- 简单枚举 */ #include <cstdio> #include <cstring> bool used[10]; /* 判断传进来的两个数是否满足条件 */ bool judge(int a, i

UVA 725 Division ( 找出 abcde / fghij = N的形式—— 暴力枚举 )

Division Time Limit:3000MS     Memory Limit:0KB     64bit IO Format:%lld & %llu 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 divide

uva 725 Division(暴力枚举)

uva 725  Division 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 =

暴力枚举 UVA 725 Division

题目传送门 1 /* 2 暴力:对于每一个数都判断,是否数字全都使用过一遍 3 */ 4 #include <cstdio> 5 #include <iostream> 6 #include <algorithm> 7 #include <cmath> 8 #include <cstring> 9 #include <string> 10 #include <map> 11 #include <set> 12

uva 725 Division(除法)暴力法!

uva 725  Division(除法) A - 暴力求解 Time Limit:3000MS     Memory Limit:0KB     64bit IO Format:%lld & %llu 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 t

[2016-02-18][UVA][725][Division]

时间:2016-02-18 22:41:48 星期四 题目编号:UVA 725 题目大意:给定 n,输出所有情况:abcde / fghij = n ,使得 a~j为0~9的一个排列 方法: 枚举fghij ,通过 fghij * n 得到 abcde,看是否满足 前导0输出是 %05d 解题过程遇到问题: 每组数据间有空行,最后一组数据后面没有空行 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 2

UVA 725 Division(hash+枚举)

题目大意: 就是说给你一个abcde/fghij = n的表达式,给你一个n,让你求出有多少个这样的式子. 解题思路: 最为简单的枚举了,要注意到我们只需要枚举出来fghij就可以了,因为abcde=fghij*n,这样的话,时间复杂度由10!就 降低到了5!,在枚举结束后,我们只需要判断0-9这些数字是否都出现了且仅出现一次即可.然后对于超过5位的数字,我们 直接break掉. 这道题的输出一定要注意那个前导0,,一开始忘记了,WA了两次,然后果断用setw(5)和setfill('0')给搞

uva 725 Division(暴力枚举) 解题心得

原题: Description Write a program that finds and displays all pairs of 5-digit numbers that between them use the digits 0 through 9once each, such that the first number divided by the second is equal to an integer N, where . That is, abcde / fghij =N w

UVA 725 division【暴力枚举】

[题意]:输入正整数n,用0~9这10个数字不重复组成两个五位数abcde和fghij,使得abcde/fghij的商为n,按顺序输出所有结果.如果没有找到则输出“There are no solutions for N.”.这里2<=n<=79. [分析]: 1.因为n>=2,且abcde=fghij×n,满足abcde>fghij.若a=0,则fghij的最小值为12345,abcde<fghij,矛盾.所以a≠0. 2.因为a≠0,所以12345<=abcde&l