UVA 725 Division(hash+枚举)

题目大意:

  就是说给你一个abcde/fghij = n的表达式,给你一个n,让你求出有多少个这样的式子。

解题思路:

  最为简单的枚举了,要注意到我们只需要枚举出来fghij就可以了,因为abcde=fghij*n,这样的话,时间复杂度由10!就

降低到了5!,在枚举结束后,我们只需要判断0-9这些数字是否都出现了且仅出现一次即可。然后对于超过5位的数字,我们

直接break掉。

  这道题的输出一定要注意那个前导0,,一开始忘记了,WA了两次,然后果断用setw(5)和setfill(‘0‘)给搞定了。

  这条语句也是可以搞定的 printf("%d / %05d = %d\n",tt,t,n);

代码:

  

# include<cstdio>
# include<iostream>
# include<algorithm>
# include<functional>
# include<cstring>
# include<string>
# include<cstdlib>
# include<iomanip>
# include<numeric>
# include<cctype>
# include<cmath>
# include<ctime>
# include<queue>
# include<stack>
# include<list>
# include<set>
# include<map>

using namespace std;

const double PI=4.0*atan(1.0);

typedef long long LL;
typedef unsigned long long ULL;

# define inf 999999999

int n;
int num[10];

int check ( int x,int y )
{
     memset(num,0,sizeof(num));
    int a = x;
    int b = y;
    for ( int i = 0;i < 5;i++ )
    {
        num[a%10]++;
        num[b%10]++;
        a/=10;
        b/=10;
    }
    for ( int i = 0;i < 10;i++ )
    {
        if ( num[i]!=1 )
            return 0;
    }
    return 1;
}

int main(void)
{
    int icase = 1;
    while ( cin>>n )
    {
        if ( n==0 )
            break;
        if ( icase > 1 )
                cout<<endl;
        int flag = 0;
        for ( int t = 1234;;t++ )
        {
            int tt = t*n;
            if ( tt >= 100000 )
                break;
            if ( check(tt,t) )
            {
                flag = 1;
                printf("%d / %05d = %d\n",tt,t,n);
                 //printf("%d / %d = %d\n",tt,t,n);
            }
        }
        if ( !flag )
        {
            printf("There are no solutions for %d.\n",n);
        }
        icase++;
    }

    return 0;
}

时间: 2024-12-28 14:23:01

UVA 725 Division(hash+枚举)的相关文章

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(枚举简单题)

今日无事,写篇日记.这是我写的第一道uva题(uva是算法竞赛入门经典里使用例题的题目来源),正值暑假,前几天看了书上中文题目和解析,玩了几日san11,又重拾起acm,今天晚上写了一下还是花了点时间. 题目:给你一个数字n,用0~9,10个数字组成两个五位数,使得他们的商为n,按顺序输出所有结果. 1.这里的除法不是c中的除(/)而是整除,一开始以为是整除,但那样79546 / 01283 = 62是一组解,79546+1 / 01283 = 62也是一组解了. 2.复杂度:枚举分子然后分子乘

uva 725 DIVISION (暴力枚举)

我的56MS 1 #include <cstdio> 2 #include <iostream> 3 #include <string> 4 #include <cstring> 5 #include <queue> 6 #include <vector> 7 #include <map> 8 #include <cmath> 9 using namespace std; 10 11 #define MEM(a

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 ( 找出 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