北京邮电大学_2010计算机___考研计算机_复试上机

1,比较奇偶数个数

题目描述:

第一行输入一个数,为n,第二行输入n个数,这n个数中,如果偶数比奇数多,输出NO,否则输出YES。

输入:

输入有多组数据。
每组输入n,然后输入n个整数(1<=n<=1000)。

输出:

如果偶数比奇数多,输出NO,否则输出YES。

样例输入:
5
1 5 2 4 3
样例输出:
YES
#include
using namespace std;

int main(){
	int n,m;
	int o,j,i;

	while(cin>>n){
		o=0;
		j=0;
		for(i=0;i>m;
			if(m%2 == 0){
				o++;
			}else{
				j++;
			}
		}
		
		if( o > j){
			cout<<"NO"<

2,找最小数

题目描述:

第一行输入一个数n,1 <= n <= 1000,下面输入n行数据,每一行有两个数,分别是x y。输出一组x y,该组数据是所有数据中x最小,且在x相等的情况下y最小的。 

输入:

输入有多组数据。
每组输入n,然后输入n个整数对。

输出:

输出最小的整数对。

样例输入:
5  
3 3  
2 2  
5 5  
2 1  
3 6
样例输出:
2 1
总结:上面的是我写的,没有ac,不明白,下面一个是看别人的,写的真好。
#include

using namespace std;

int main(){
	int n,m,h;
	int i;

	while(cin>>n){
		int arr[2020] = {0};
		for(i=0;i>m;
			cin>>h;
			if(arr[m+510] != 0){
				if(h < arr[m+510]){
					arr[m+510] =h;
				}
			}else{
				arr[m+510] = h;
			}
		}
		
		for(i=0;i<2020;i++){
			if(arr[i] != 0){
				cout<
#include
#include

int main(){
        int i,n,x,y,MinX,MinY;
        //freopen("C:\\Users\\SJF\\Desktop\\acm.txt","r",stdin); 
        while(scanf("%d",&n) != EOF){
                for(i = 0;i < n;i++){
                        scanf("%d %d",&x,&y);
                        //第一次为MinX,MinY赋初值
                        if(i == 0){
                                MinX = x;
                                MinY = y;
                        }
                        else{
                                //该组数据是所有数据中x最小,且在x相等的情况下y最小的。 
                                if(x < MinX){
                                        MinX = x;
                                        MinY = y;
                                }
                                else if(x == MinX && y < MinY){
                                        MinX = x;
                                        MinY = y;
                                }
                        }
                        
                }
                printf("%d %d\n",MinX,MinY);
        }
}

3,C翻转
题目描述:

首先输入一个5 * 5的数组,然后输入一行,这一行有四个数,前两个代表操作类型,后两个数x y代表需操作数据为以x y为左上角的那几个数据。

操作类型有四种:  
1 2 表示:90度,顺时针,翻转4个数  
1 3 表示:90度,顺时针,翻转9个数  
2 2 表示:90度,逆时针,翻转4个数  
2 3 表示:90度,逆时针,翻转9个数 

输入:

输入有多组数据。
每组输入一个5 * 5的数组,然后输入一行,这一行有四个数,前两个代表操作类型,后两个数x y代表需操作数据为以x y为左上角的那几个数据。

输出:

输出翻转后的数组。

样例输入:
1 2 3 4 5
6 7 8 9 10
11 12 13 14 15
16 17 18 19 20
21 22 23 24 25
1 3 1 1
样例输出:
11 6 1 4 5
12 7 2 9 10
13 8 3 14 15
16 17 18 19 20
21 22 23 24 25






4,哈夫曼树

题目描述:

哈夫曼树,第一行输入一个数n,表示叶结点的个数。需要用这些叶结点生成哈夫曼树,根据哈夫曼树的概念,这些结点有权值,即weight,题目需要输出所有结点的值与权值的乘积之和。

输入:

输入有多组数据。
每组第一行输入一个数n,接着输入n个叶节点(叶节点权值不超过100,2<=n<=1000)。

输出:

输出权值。

样例输入:
5  
1 2 2 5 9
样例输出:
37
总结:这个解法非常好,没想到。

#include
#include
using namespace std;

int main(){
	int n,i,sum;
	int arr[1001];

	while(cin>>n){
		for(i=0;i>arr[i];
		}
		
		sum = 0;
		for(i=1;i



你可能感兴趣的:(算法学习)