01_南理学工学院OJ_部分简单题目

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


 

你可能感兴趣的:(【ACM】刷题记录)