暴力演算法之2141 第N個智慧數+1941 找寶藏+1879 私密日記
阿新 • • 發佈:2021-06-21
一個正整數如果能表示成兩個正整數的平方差,則稱這個數為一個“智慧數”,比如16就等於5的平方減去3的平方,所以16就是一個智慧數,從1開始的自然數列中,將“智慧數”從小到大編號為1,2,3,...,n。現輸入一個正整數n,輸出第n個“智慧數”。
輸入輸入僅包含一個正整數 n(1≤n≤100)。
輸出
輸出僅包含一個正整數,表示編號為 n 的“智慧數”。
輸入樣例
3
輸出樣例
7
#include <iostream> using namespace std; int n; int a[110]; int main() { cin >> n;View Codefor (int i = 2; i <= 100; ++i) { for (int j = i-1; j > 0; --j) { if ((i+j)*(i-j) > 100) { break; } else { a[(i+j)*(i-j)] = 1; } } } int cnt = 0; for (int i = 1; i <= 100; ++i) { if(a[i] == 1) { cnt++; } if (cnt == n) { cout << i << endl; break; } } return 0; }
在一片平坦的大草原上,現在你站在一棵大樹下,寶藏地圖上面有一些指令,會叫你向東,西,南,北方向走若干步,最終你所站的位置就是寶藏的位置。
現在你以最短路徑走向寶藏,每次仍然只能向東,西,南,北方向走動,請問至少要走幾步能夠到達寶藏?假設這片草原都是平坦的無障礙物的。
輸入
輸入一行一個指令字串,最多200個字元。指令通過逗號分開,每一個指令由兩部分組成,一個是正整數(不超過1000),以及一個方向(N (北), E (東), S (南),W (西))。比如3W表示向西走3步。字串的最後有一個'.'表示指令結束。
輸出
輸出一個整數,表示最少需要的步數。
輸入樣例
3N,1E,1N,3E,2S,1W.
輸出樣例
5
#include <iostream> #include <algorithm> using namespace std; int x = 0, y = 0; int k; char type; int main() { while (cin >> k >> type) { switch(type) { case 'N': y += k; break; case 'S': y -= k; break; case 'E': x += k; break; case 'W': x -= k; break; } cin >> type; if (type == '.') break; } cout << abs(x) + abs(y) << endl; return 0; }View Code
Noder現在在上初中了,日記裡面也會出現一些敏感話題,為了防止別人看自己的小祕密,他想對自己的日記進行加密。
他的加密演算法如下:日記長度是n,有一個長度為n的整型陣列p,裡面的數字兩兩不相同,(1<=i<=n,1<=p[i]<=n)。然後對日記進行m次輪換。
每次輪換是重新調整所有字元的位置,將日記中此時的第i個字元放到第p[i]個位置去。
輸入的日記長度不會超過n。如果長度沒有到n就在沒有字元的位置補上空格(使字串長度為n)。
輸入
單組測試資料。 第一行有一個整數n(0 < n <= 200)。 第二行有n個整數,表示陣列p。 接下來有若干篇日記要加密。 每一篇要加密的日記佔一行,先輸入一個整數m表示要輪換的次數,後面是要加密的日記,與m用一個空格分開。日記只由大寫/小寫英文字母組成,是非空串。0<m<=200。 當m=0的時候結束查詢。
輸出
對於每一個查詢,輸出加密後的日記,加密後的日記長度為n。
輸入樣例
4
4 1 2 3
1 ABc
2 CDxv
4 CBS
0
輸出樣例
Bc A xvCD CBS
樣例解釋
樣例中n=4,設這4個位置分別為①②③④;
依題意,每次輪換需要:
將位置①的字元換到④位置,位置②的字元換到①位置,位置③的字元換到②位置,位置④的字元換到③位置。
對於第一篇,ABc輪換一次後為Bc A(此時位置③無字元,替換為空格);
對於第二篇,CDxv輪換一次後為DxvC,再輪換一次後為xvCD;
對於第三篇,CBS輪換四次後變回CBS,但需要在位置④補上空格,輸出CBS 。
#include <iostream> #include <cstring> using namespace std; int n, m; int p[210]; char str[210], tmp[210]; int main() { cin >> n; for (int i = 0; i < n; ++i) { cin >> p[i]; } while(1) { cin >> m; if (m == 0) { break; } cin >> str; int len = strlen(str); if (len < n) { for (int i = len; i < n; ++i) { str[i] = ' '; } str[n] = '\0'; } while (m--) { for (int i = 0; i < n; ++i) { tmp[p[i] - 1] = str[i]; } tmp[n] = '\0'; for (int i = 0; i <= n; ++i) { str[i] = tmp[i]; } } cout << str << endl; } return 0; }View Code