UVA725

虽然是暴力求解,但是也要观察条件,尽量提高效率。如本题,原本要枚举10个数,但是分析可知通过枚举fghij就可以了。

#include<stdio.h>
#include<string.h>
//判断a,b中的所有数字都不等
int judge(int a,int b){
    if(a>100000)
    return 0;
    int ans[15];
    int count = 0;
    int i;
    memset(ans,0,sizeof(ans));
    if(b<10000)
        ans[0]=1;//因为如果是四位数,要考虑第一个0
    while(a){
        ans[a%10]=1;
        a/=10;
    }
    while(b){
        ans[b%10]=1;
        b/=10;
    }
    for(i=0;i<10;i++)
        count += ans[i];
    if(count==10) return 1;
    else return 0;
}
int main(){
    int n,fghij;
    int f=1;
    while(scanf("%d",&n) == 1){
        if(n==0) return 0;
        for(fghij=1234;fghij<100000;fghij++){
            if(judge(fghij*n,fghij)){
                printf("%d / %05d = %d\n",fghij*n,fghij,n);
                f=0;
            }
        }
        if(f)
            printf("There are no solutions for %d\n",n);
    }
    return 0;
}
时间: 2024-11-03 21:27:03

UVA725的相关文章

UVA725 UVALive5362 Division

Regionals 1990 >> North America - East Central NA 这可以说是最快枚举程序,比网上现有的暴力枚举程序要快. 问题链接:UVA725 UVALive5362 Division.基础练习题,用C语言编写程序. 题意简述:输入正整数n,用0~9这10个数字不重复组成两个五位数abcde和fghij,使得abcde/fghij的商为n,按顺序输出所有结果.如果没有找到则输出"There are no solutions for N."

Uva725 除法

Uva725 除法 题目描述: 输入正整数n,按从小到大的顺序输出所有形如\(abcde/fghij=n\)的表达式,其中\(a-j\)恰好为数字0-9的一个排列(可以有前导0). 思路: 枚举\(fghij\),然后计算出\(abcde\),看所有的数字是否重复.这里主要是要注意判断0-9数字分别出现一次时的效率问题. 代码实现: #include <iostream> #include <map> #include <algorithm> #define LL lo

7_1 除法(UVa725)&lt;选择合适的枚举对象&gt;

如果把数字0到9分配成2个整数(各五位数),现在请你写一支程序找出所有的配对使得第一个数可以整除第二个数,而且商为N(2<=N<=79),也就是:abcde / fghijk = N这里每个英文字母代表不同的数字,第一个数字可以为0.Input输入包含许多笔待测数据,每列代表一笔待测数据,每笔待测数据包含一个正整数N,N为0时代表输入结束.Output对每笔待测数据由小到大输出每一对符合条件的数.如果找不到符合条件的数对,则输出There are no solutions for N..每笔测

uva725 Division

题目描述: abcde / fghij =N a,b···j 为0-9任意一个数,且互相不同 任意给一个n(2<=n<=79),输出满足条件的可能 思路1:10!只有不到400w,直接暴力枚举即可 #include <cstdio> #include <cstring> #include <algorithm> #include <iostream> using namespace std; int a[]= {1,0,2,3,4,5,6,7,8

uva725(除法)

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 divided by the second is equal to an integer N, where . That is, abcde / fghij =N wher

UVA725 Division【枚举】

  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 = N wher

例题7-1 除法 UVa725

1.题目描述:点击打开链接 2.解题思路:本题利用暴力搜索解决.直接从1234开始枚举除数,由于乘积不能超过100000,所以上限是100000/n.然后判断得到的乘积和除数中的所有数是否都各不相同即可. 3.代码: #define _CRT_SECURE_NO_WARNINGS #include<iostream> #include<algorithm> #include<string> #include<sstream> #include<set&

UVA-725除法-Division

分析:  枚举0-9的所有排列?没这个必要,只需要枚举fghij就可以计算出abcde(=fghij * n),然后判断是否所有的数字都不相同即可.不仅程序简单,而且枚举量也从10!=3628800降低至不到1万,而且当abcde的位数不等于5的时候,就可以终止枚举了(记住n是大于等于2的哟!) AC代码如下:用时为1573MS. #include<cstdio> #include<cstring> #include<iostream> #include<cmat

A题:uva725暴力求解

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 divided by the second is equal to an integer N, where . That is, abcde / fghij =N whe