听网友建议,前段时间接触刘汝佳的《算法竞赛入门经典》时在南理学工学院(http://acm.nyist.net/JudgeOnline/problemset.php)刷过的一些些简单题目。
南理学工学院_部分简单题目(8题):
南阳理工学院_0001_A+B Problem.cpp
南阳理工学院_0004_ASCII码排序.cpp
南阳理工学院_0011_奇偶数分离.cpp
南阳理工学院_0013_Fibonacci数.cpp
南阳理工学院_0031_5个数求最值.cpp
南阳理工学院_0034_韩信点兵.cpp
南阳理工学院_0039_水仙花数.cpp
南阳理工学院_0041_三个数从小到大排序.cpp
南阳理工学院_0001_A+B Problem.cpp
// 南阳理工学院_0001_A+B Problem.cpp /** * A+B Problem * 时间限制:3000 ms | 内存限制:65535 KB * 难度:0 * 描述 * 此题为练手用题,请大家计算一下a+b的值 * 输入 * 输入两个数,a,b * 输出 * 输出a+b的值 * 样例输入 * 2 3 * 样例输出 * 5 **/ #include <iostream> using namespace std; int main() { int a, b; cin >> a >> b; cout << a + b << endl; return 0; }
南阳理工学院_0004_ASCII码排序.cpp
// 南阳理工学院_0004_ASCII码排序.cpp /** * ASCII码排序 * 时间限制:3000 ms | 内存限制:65535 KB * 难度:2 * 描述 * 输入三个字符(可以重复)后,按各字符的ASCII码从小到大的顺序输出这三个字符。 * 输入 * 第一行输入一个数N,表示有N组测试数据。后面的N行输入多组数据,每组输入数据都是占一行,有三个字符组成,之间无空格。 * 输出 * 对于每组输入数据,输出一行,字符中间用一个空格分开。 * 样例输入 * 3 * qwe * asd * zxc * 样例输出 * e q w * a d s * c x z * 来源 * 网络 * 上传者 * naonao **/ #include <iostream> using std::cin; using std::cout; inline void swap(char & x, char & y) { char t; t = x; x = y; y = t; return; } int main() { int n; cin >> n; while( n--) { char a; char b; char c; cin >> a >> b >> c; if (a > b) swap(a, b); if (a > c) swap(a, c); if (b > c) swap(b, c); cout << a << " " << b << " " << c << std::endl; } return 0; }
南阳理工学院_0011_奇偶数分离.cpp
// 南阳理工学院_0011_奇偶数分离.cpp /** * 奇偶数分离 * 时间限制:3000 ms | 内存限制:65535 KB * 难度:1 * 描述: * 有一个整型偶数n(2<= n <=10000),你要做的是:先把1到n中的所有奇数从小到大输出,再把所有的偶数从小到大输出。 * 输入: * 第一行有一个整数i(2<=i<30)表示有 i 组测试数据; * 每组有一个整型偶数n。 * 输出: * 第一行输出所有的奇数 * 第二行输出所有的偶数 * 样例输入: * 2 * 10 * 14 * 样例输出: * 1 3 5 7 9 * 2 4 6 8 10 * * 1 3 5 7 9 11 13 * 2 4 6 8 10 12 14 * * 来源: * [苗栋栋]原创 * 上传者 * 苗栋栋 **/ #include <iostream> using std::cin; using std::cout; using std::endl; int main() { int i(0); cin >> i; for ( int j = 0; j < i; ++j) { int max; cin >> max; int oddNumber(1); int evenNumber(2); for (; oddNumber <= max; oddNumber += 2) { cout << oddNumber << " "; } cout << endl; for (; evenNumber <= max; evenNumber +=2) { cout << evenNumber << " "; } cout << endl; cout << endl; } return 0; }
南阳理工学院_0013_Fibonacci数.cpp
// 南阳理工学院_0013_Fibonacci数.cpp /** * Fibonacci数 * 时间限制:3000 ms | 内存限制:65535 KB * 难度:1 * 描述 * 无穷数列1,1,2,3,5,8,13,21,34,55...称为Fibonacci数列,它可以递归地定义为 * F(n)=1 ...........(n=1或n=2) * F(n)=F(n-1)+F(n-2).....(n>2) * 现要你来求第n个斐波纳奇数。(第1个、第二个都为1) * 输入 * 第一行是一个整数m(m<5)表示共有m组测试数据 * 每次测试数据只有一行,且只有一个整形数n(n<20) * 输出 * 对每组输入n,输出第n个Fibonacci数 * 样例输入 * 3 * 1 * 3 * 5 * 样例输出 * 1 * 2 * 5 * 来源 * 经典题目 * 上传者 * 张云聪 **/ #include <iostream> using std::cin; using std::cout; int main() { int n; cin >> n; while( n--) { int number; cin >> number; int sum = 1; int last = 0; while(--number) { int prevent = sum; sum += last; last = prevent; } cout << sum << std::endl; } return 0; }
南阳理工学院_0031_5个数求最值.cpp
// 南阳理工学院_0031_5个数求最值.cpp /** * 5个数求最值 * 时间限制:1000 ms | 内存限制:65535 KB * 难度:1 * 描述 * 设计一个从5个整数中取最小数和最大数的程序 * 输入 * 输入只有一组测试数据,为五个不大于1万的正整数 * 输出 * 输出两个数,第一个为这五个数中的最小值,第二个为这五个数中的最大值,两个数字以空格格开。 * 样例输入 * 1 2 3 4 5 * 样例输出 * 1 5 * 来源 * C语言课本第四章第一题 * 上传者 * 张云聪 **/ #include <iostream> using namespace std; int main() { int a[5]; cin >> a[0] >> a[1] >> a[2] >> a[3] >> a[4]; int maxElem = a[0]; int minElem = a[0]; int i; for (i = 0; i !=5; ++i) { if (a[i] > maxElem) maxElem = a[i]; if (a[i] < minElem) minElem = a[i]; } cout << minElem << " " << maxElem << endl; return 0; }
南阳理工学院_0034_韩信点兵.cpp
// 南阳理工学院_0034_韩信点兵.cpp /** * 韩信点兵 * 时间限制:3000 ms | 内存限制:65535 KB * 难度:1 * 描述 * 相传韩信才智过人,从不直接清点自己军队的人数,只要让士兵先后以三人一排、五人一排、七人一排地变换队形,而他每次只掠一眼队伍的排尾就知道总人数了。输入3个非负整数a,b,c ,表示每种队形排尾的人数(a<3,b<5,c<7),输出总人数的最小值(或报告无解)。已知总人数不小于10,不超过100 。 * 输入 * 输入3个非负整数a,b,c ,表示每种队形排尾的人数(a<3,b<5,c<7)。例如,输入:2 4 5 * 输出 * 输出总人数的最小值(或报告无解,即输出No answer)。实例,输出:89 * 样例输入 * 2 1 6 * 样例输出 * 41 * 来源 * 经典算法 * 上传者 * 首席执行官 **/ #include <iostream> using std::cin; using std::cout; int main() { int a, b, c; cin >> a >> b >> c; int x = 0; for (x = 10; x <= 100; ++x) { if ( (x % 3 == a) && (x % 5 == b) && (x % 7 == c)) { cout << x << "\n"; break; } } if ( x == 101) { cout << "No answer\n"; } return 0; }
南阳理工学院_0039_水仙花数.cpp
// 南阳理工学院_0039_水仙花数.cpp /** * 水仙花数 * 时间限制:1000 ms | 内存限制:65535 KB * 难度:0 * 描述 * 请判断一个数是不是水仙花数。 * 其中水仙花数定义各个位数立方和等于它本身的三位数。 * 输入 * 有多组测试数据,每组测试数据以包含一个整数n(100<=n<1000) * 输入0表示程序输入结束。 * 输出 * 如果n是水仙花数就输出Yes * 否则输出No * 样例输入 * 153 * 154 * 0 * 样例输出 * Yes * No * 来源 * C语言课本习题改编 * 上传者 * 张云聪 **/ #include <iostream> using std::cin; using std::cout; inline int threeTime(int source) { return source * source * source; } inline int result(int source) { return threeTime(source/100) + threeTime(source % 100 / 10) + threeTime(source % 10); } int main() { int test; while(cin >> test) { if (test == 0) { break; } if ( result(test) == test ) { cout << "Yes\n"; } else { cout << "No\n"; } } return 0; }
南阳理工学院_0041_三个数从小到大排序.cpp
// 南阳理工学院_0041_三个数从小到大排序.cpp /** * 三个数从小到大排序 * 时间限制:3000 ms | 内存限制:65535 KB * 难度:0 * 描述 * 现在要写一个程序,实现给三个数排序的功能 * 输入 * 输入三个正整数 * 输出 * 给输入的三个正整数排序 * 样例输入 * 20 7 33 * 样例输出 * 7 20 33 * 来源 * [张洁烽]原创 * 上传者 * 张洁烽 **/ #include <iostream> using std::cin; using std::cout; int main() { int a, b, c; cin >> a >> b >> c; if (a > b) { a = b + a; b = a - b; a = a -b;} if (a > c) { a = c + a; c = a - c; a = a - c;} if (b > c) { b = c + b; c = b - c; b = b - c;} cout << a << " " << b << " " << c << " "<< std::endl; return 0; }