d182: 00256 - Quirksome Squares

  1. 1. 內容
  2. 2. 範例輸入
  3. 3. 範例輸出
  4. 4. 想法
  5. 5. 程式碼

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 。

程式碼

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