一个正整数如果能表示成两个正整数的平方差,则称这个数为一个“智慧数”,比如 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