CPE 一顆星
題目連結:https://zerojudge.tw/ShowProblem?problemid=d182
內容
把一數從中間切開,若左右兩數相加的平方剛好等於原本的數,則此數稱為 quirksome number。
3025 = (30+25)^2
給定一數 N 代表位數,找出符合以上性質的所有數。
像是4位數就是從0000到9999。注意:數字前方的0也要算在內。也就是說0001等於 (00+01)^2 ,是一個4位數的quirksome number。
每筆測資有一個 N (N = 2, 4, 6, 8)。
範例輸入
2
2
範例輸出
00
01
81
00
01
81
想法
此數必定為完全平方數,如果 N = 6,就只要判斷000 ~ 999 就好,判斷方式如下
假設迴圈跑到 703
得到其平方 493209
做除法運算與取餘數可得到左右兩數
493209 / 1000 = 493
493209 % 1000 = 209
將兩數相加平方看是否等於原平方數。
把得到的值利用佇列(queue)或陣列先存起來,當 N 輸入時再進行調用即可。
用此方法 000001 會存成 1 ,輸出時要補 0,可將數字從 int 轉成 string 型態,利用長度判斷需要補幾個 0 。
程式碼
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 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94
| #include <bits/stdc++.h> #define fastio ios_base::sync_with_stdio(false), cin.tie(nullptr) using namespace std;
int main(){ fastio; queue<int> two, four, six, eight; int temp, compare; for(int i = 0; i < 10; ++i){ temp = i*i; compare = temp/10 + temp%10; compare *= compare; if(compare == temp){ two.push(temp); } } for(int i = 0; i < 100; ++i){ temp = i*i; compare = temp/100 + temp%100; compare *= compare; if(compare == temp){ four.push(temp); } } for(int i = 0; i < 1000; ++i){ temp = i*i; compare = temp/1000 + temp%1000; compare *= compare; if(compare == temp){ six.push(temp); } } for(int i = 0; i < 10000; ++i){ temp = i*i; compare = temp/10000 + temp%10000; compare *= compare; if(compare == temp){ eight.push(temp); } } int n; string s; while(cin >> n){ if(n == 2){ int two_size = two.size(); for(int i = 0; i < two_size; ++i){ two.push(two.front()); s = to_string(two.front()); if(s.length() < 2){ for(int i = 0; i < 2-s.length(); ++i) cout << 0; } cout << s << "\n"; two.pop(); } } else if(n == 4){ int four_size = four.size(); for(int i = 0; i < four_size; ++i){ four.push(four.front()); s = to_string(four.front()); if(s.length() < 4){ for(int i = 0; i < 4-s.length(); ++i) cout << 0; } cout << s << "\n"; four.pop(); } } else if(n == 6){ int six_size = six.size(); for(int i = 0; i < six_size; ++i){ six.push(six.front()); s = to_string(six.front()); if(s.length() < 6){ for(int i = 0; i < 6-s.length(); ++i) cout << 0; } cout << s << "\n"; six.pop(); } } else { int eight_size = eight.size(); for(int i = 0; i < eight_size; ++i){ eight.push(eight.front()); s = to_string(eight.front()); if(s.length() < 8){ for(int i = 0; i < 8-s.length(); ++i) cout << 0; } cout << s << "\n"; eight.pop(); } } } return 0; }
|