程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> uva 725 Division(除法)暴力法!,uvadivision

uva 725 Division(除法)暴力法!,uvadivision

編輯:C++入門知識

uva 725 Division(除法)暴力法!,uvadivision


                       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 the first number divided by the second is equal to an integer N, where $2
\le N \le 79$. That is,

 


abcde / fghij =N

where each letter represents a different digit. The first digit of one of the numerals is allowed to be zero.

 

Input 

Each line of the input file consists of a valid integer N. An input of zero is to terminate the program.

 

Output 

Your program have to display ALL qualifying pairs of numerals, sorted by increasing numerator (and, of course, denominator).

Your output should be in the following general form:

 


xxxxx / xxxxx =N

xxxxx / xxxxx =N

.

.

 


In case there are no pairs of numerals satisfying the condition, you must write ``There are no solutions for N.". Separate the output for two different values of N by a blank line.

 

Sample Input 

61
62
0

 

Sample Output 

There are no solutions for 61.

79546 / 01283 = 62
94736 / 01528 = 62

 

題意:
輸入正整數n,按從小到大的順序輸出所有形如abcde/fghij=n的表達式,其中a—j恰好為數字0—9的一個排列(可以有0前導)  2=<n<=79
思路:

可以用五層循環,但是過程有些繁瑣
也可只枚舉fghij就可以算出abcde,然後判斷符不符合條件。

 

#include<stdio.h>
int p[15];
int juge(int a, int b)    //判斷出符合條件的a,b,把a,b每一位都標記一次
{
    if (a > 98765)
        return 0;
    for (int i = 0; i < 10; i++)
    {
        p[i] = 0;
    }
    if (b<10000)
        p[0]=1;
    while(a)
    {
        p[a%10] = 1;                      //判斷每一位,然後標記
        a/= 10;
    }
    while(b)
    {
        p[b%10] = 1;
        b/=10;
    }
    int total = 0;
    for (int i = 0; i < 10; i++)
        total+=p[i];                          
    return total==10;                      //直到有符合條件的不同的十個數字
}
int main()
{
    int n, m = 0;
    while (scanf("%d", &n) == 1, n)
    {

        if (m>0) printf("\n");m++;                     //輸出格式要求
        int f = 1;
        for (int i = 1234; i < 99999; i++)             //范圍應該很好想出
        {
            if (juge(i*n,i))
            {
                printf("%d / %05d = %d\n", i*n,i,n);   //格式控制輸出,五位數如果缺就用0補上
                f =0;
            }
        }
        if (f)
        {
            printf("There are no solutions for %d.\n",n);
        }
    }
    return 0;
}

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved