UVA471 Magic Numbers 题解

1.题目

题意很简单:输入n,枚举所有的a,b,使得 (1)满足a/b=n。 (2)满足a,b各个位上的数字不相同。

2.思路

(1)对于被除数,要满足各个位上的数字,显然最大枚举到987654321就可以。 (2)对于被除数,要枚举n的整数倍以减少枚举次数。

3.代码及实现

分析完这些,这个题的代码就自然而然很简单了,但是要注意 “相邻两组数据之间输出一行空行”

#include<bits/stdc++.h>
using namespace std;
long long m;
int t, check[10];

bool check_same(long long n){
    memset(check, 0, sizeof(check));
    while(n){
        long long tem = n % 10;         //拆位判重都会吧
        check[tem] ++;                  //写成函数都会吧 
        if(check[tem] > 1) return 0;
        else n /= 10;
    }
    return 1;
}

int main()
{
    cin >> t;
    bool k = 1; 
    while(t --){        
        if(! k) cout << endl;           //相邻两组数据之间输出一行空行???奇奇怪怪 
        k = 0;       
        cin >> m;
        for(long long i = m; i <= 9876543210; i += m)    //直接暴力枚举m的整数倍 
            if(check_same(i) && check_same(i / m))
                cout << i << " / " << i / m << " = " << m << endl; 
                //输出麻烦时喜欢用cout 
    }   
    return 0;
}

 

posted @ 2021-12-24 20:21  Altwilio  阅读(36)  评论(0编辑  收藏  举报