2019年全国高校计算机能力挑战赛C++组题解

最后一题是左子右兄弟法,可是没时间写了太菜了哎,都怪第4题中间有个地方卡了好久,其实思路很简单gg……


第一题,简单的商场打折转换,不知道有没有坑……

//16题 
#include <iostream>
#include <string>
using namespace std;

int main(){
	
	int n;
	cin>>n;
	int money=3200;
	if(n<=0){
		cout<<money<<endl;
	}else if(n<=10){
		money-=n*10;
		cout<<money<<endl;
	}else if(n<=50){
		money-=100;
		money-=(n-10)*5;
		cout<<money<<endl;
	}else{
		cout<<"2800"<<endl;
	}
	
	
	return 0;
} 

第二题,输入N,将0~N这么多数都转换成二进制数,计算之中二进制数中0的个数

//17题
#include <iostream>
using namespace std;

int main(){
	int n,i,j=0;
	int a;
	cin>>n;
	i=n;
	int num=0;//0的个数 
	for(int k=1;k<=n;k++){
		i=k;
		while(i) {
		a = i%2;
		if(a==0){
			num++;
		}
		i/=2;
		j++;
		}
	}
	cout<<num<<endl;
	
	return 0;
}

第三题,能被2整除和能被5整除的数分别输出,用vector就很方便,题目描述应该是有点问题的,多了一个“只能”,按样例来就ok吧……

//18题
#include <iostream>
#include <vector>
using namespace std;

int main(){
	
	int n;
	cin>>n;
	int b;
	vector<int> a_1,a_2,a_3;
	for(int i=0;i<n;i++){
		cin>>b;
		if(b%2==0&&b%5!=0){
			a_1.push_back(b);
		}
		if(b%2==0){
			a_2.push_back(b);
		}
		if(b%5==0){
			a_3.push_back(b);
		}
	}
	for(int i=0;i<a_1.size()-1;i++){
		cout<<a_1[i]<<" ";
	}
	cout<<a_1[a_1.size()-1]<<endl;
	for(int i=0;i<a_2.size()-1;i++){
		cout<<a_2[i]<<" ";
	}
	cout<<a_2[a_2.size()-1]<<endl;
	for(int i=0;i<a_3.size()-1;i++){
		cout<<a_3[i]<<" ";
	}
	cout<<a_3[a_3.size()-1]<<endl;
	
	return 0;
} 

第四题,中间string有个bug真是搞死了我了,浪费了不少时间,不然最后一题那个左子右兄弟我应该可以做出来的,哎,平时练得时候根本没注意过时间,都怪自己……

//19题
#include <iostream>
#include <vector>
#include <algorithm>
#include <string>
using namespace std;

int main(){
	
	int n,k;
	cin>>n>>k;
	vector<string> name;	
	string na;
	double fenshu;
	vector<double> state;
	for(int i=0;i<n;i++){
		cin>>na;
		name.push_back(na);
		int b[k];
		for(int j=0;j<k;j++){
			cin>>fenshu;
			b[j]=fenshu;
		}
		sort(b,b+k);
		state.push_back(0);
		for(int l=1;l<k-1;l++){
			state[i]+=b[l];
		} 
		state[i]/=(k-2);
//		cout<<state[i]<<endl;
 	}
 	vector<double> ss;
	for(int i=0;i<state.size();i++){
		ss.push_back(state[i]);
	}
 	sort(ss.begin(),ss.end());
 	
 	int space1;
 	int space2;
 	
 	for(int i=0;i<state.size();i++){
		if(state[i]==(ss[n-1])){
			space1=i;
		}
		if(state[i]==(ss[n-2])){
			space2=i;
		}
	}
 	
 	cout<<name[space1]<<" "<<name[space2]<<endl;

	return 0;
} 

测试样例:

5 4
zhang 85 85 90 80
wang 85 90 80 90
zhao 90 92 85 90
li 75 80 85 80
yang 81 75 80 85

发布了228 篇原创文章 · 获赞 76 · 访问量 6万+

猜你喜欢

转载自blog.csdn.net/qq_41895747/article/details/103106367