1. 程式人生 > 其它 >UVA471 Magic Numbers 題解

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; }