1. 程式人生 > 其它 >暴力演算法之2141 第N個智慧數+1941 找寶藏+1879 私密日記

暴力演算法之2141 第N個智慧數+1941 找寶藏+1879 私密日記

一個正整數如果能表示成兩個正整數的平方差,則稱這個數為一個“智慧數”,比如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;
    
for (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; }
View Code

在一片平坦的大草原上,現在你站在一棵大樹下,寶藏地圖上面有一些指令,會叫你向東,西,南,北方向走若干步,最終你所站的位置就是寶藏的位置。

現在你以最短路徑走向寶藏,每次仍然只能向東,西,南,北方向走動,請問至少要走幾步能夠到達寶藏?假設這片草原都是平坦的無障礙物的。

輸入

輸入一行一個指令字串,最多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