听网友建议,前段时间接触刘汝佳的《算法竞赛入门经典》时在南理学工学院(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
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
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
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
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
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
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
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
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;
}