UVA471 Magic Numbers 題解
阿新 • • 發佈:2021-12-24
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; }