UVA 725 UVA 10976 简单枚举

UVA 725

题意:0~9十个数组成两个5位数(或0开头的四位数),要求两数之商等于输入的数据n。abcde/fghij=n。

思路:暴力枚举,枚举fghij的情况算出abcde判断是否符合题目条件。(注意前导零的判断)

枚举的方法为 for(int i=1234;i<=100000/n;i++){}

#include<cstdio>
#include<cstring>
int num[10];
bool check(int a,int b) {
    memset(num,0,sizeof num);
    if(b>98765) return false;
    if(a<10000) num[0]++;
    if(b<10000) num[0]++;
    while(a) {
        num[a%10]++;
        a/=10;
    }
    while(b) {
        num[b%10]++;
        b/=10;
    }
    for(int i=0;i<10;i++) {
        if(num[i]>1) return false;
    }
    return true;
}
int main() {
    int n,cnt=0;
    while(~scanf("%d",&n),n!=0) {
        if(cnt>0) printf("\n");cnt++;
        int flag=0;
        for(int i=1234;i<=100000/n;i++) {
            if(check(i,i*n)) {
                flag=1;
                printf("%05d / %05d = %d\n",i*n,i,n);
            }
        }
        if(flag==0) printf("There are no solutions for %d.\n",n);
    }
    return 0;
}

UVA 10976

题意:输入正整数k,找到所有的正整数x>=y使得1/k=1/x+1/y;

思路:枚举x,y,考虑枚举范围,因为x>=y,1/x<=1/y,所以y<=2k。在k+1到2k范围内枚举y,计算出对应的x。

#include<cstdio>
int res[10010][2];
int main() {
    int k;
    while(~scanf("%d",&k)) {
        int x,y;
        int cnt=0;
        for(y=k+1;y<=2*k;y++) {
            if((k*y)%(y-k)==0) {
                x=(k*y)/(y-k);
                res[cnt][0]=x;res[cnt++][1]=y;
            }
        }
        printf("%d\n",cnt);
        for(int i=0;i<cnt;i++) {
            printf("1/%d = 1/%d + 1/%d\n",k,res[i][0],res[i][1]);
        }
    }
    return 0;
}

枚举:根据题目条件,可以缩小枚举的范围,枚举某个数,算出另个数判断是否符合条件。

时间: 2025-01-07 02:19:08

UVA 725 UVA 10976 简单枚举的相关文章

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【暴力枚举】

[题意]:输入正整数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

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

题目传送门 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 - 10167 - Birthday Cake (简单枚举)

思路:简单枚举 AC代码: #include <cstdio> #include <cstring> #include <iostream> #include <algorithm> #include <cmath> using namespace std; int x[105], y[105]; int main() { int A, B, N; while(scanf("%d", &N), N) { for(int

[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(除法)暴力法!

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

uva 1560 - Extended Lights Out(枚举 | 高斯消元)

题目链接:uva 1560 - Extended Lights Out 题目大意:给定一个5?6的矩阵,每个位置上有一个灯和开关,初始矩阵表示灯的亮暗情况,如果按了这个位置的开关,将会导致周围包括自己位置的灯状态变换,求一个按开关位置,保证所有灯都灭掉. 解题思路: 枚举,枚举第一行的状态,然后递推出后面四行的状态. 高斯消元,对于每个位置对定变量,这样列出30个方程求解. C++ 枚举 #include <cstdio> #include <cstring> #include &