Java教程

暴力算法之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

 

这篇关于暴力算法之2141 第N个智慧数+1941 找宝藏+1879 私密日记的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!