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

1,比较奇偶数个数

题目描述:

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

输入:

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

输出:

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

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

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

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


	return 0;
}

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<iostream>

using namespace std;

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

	while(cin>>n){
		int arr[2020] = {0};
		for(i=0;i<n;i++){
			cin>>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<<i-510<<" "<<arr[i]<<endl;
				break;
			}
		}
	}


	return 0;
}
#include<stdio.h>
#include<string.h>

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<iostream>
#include<algorithm>
using namespace std;

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

	while(cin>>n){
		for(i=0;i<n;i++){
			cin>>arr[i];
		}
		
		sum = 0;
		for(i=1;i<n;i++){
			sort(arr+i-1,arr+n);
			sum += arr[i] + arr[i-1];
			arr[i] += arr[i-1];
		}
		
		cout<<sum<<endl;
	}


	return 0;
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值