Vector、Sort课后题解

Vector、Sort课后题解

HZNU OJ 2004

Description
今天是六一儿童节,ACM队的某些人比如说yl臭不要脸的想要过节。为此,wxa买了很多大白兔糖分给大家,但是想要得到这些糖必须回答出wxa的题目。他在每颗糖上标有数字,第一个找到数字K的人,将得到糖。zz想得到糖,但是眼力不好,你能帮帮他快速的找到标号为K的糖吗?(题目保证K一定存在)

Input
第一行输入一个T,表示有T组测试样例。

对于每组测试样例第一行输入n,k。第二行输入n个数据(n<10000),代表n颗糖的位置(1 ~ n)。

Output
标号为k的糖在哪个位置?

Samples
input
1
10 8
2 3 4 5 6 7 9 10 2 8
output
10

题意:在n个数中找k

#include
#include
#include
using namespace std;
vector<int>vec;
int main(){
     
	int T;
	int n,k;
	cin>>T;
	while(T--){
     
		vec.clear();//清空vec 
		cin>>n>>k;
		for(int i=0;i<n;++i){
     
			int x;
			cin>>x;
			vec.push_back(x);
		}
		int pos=find(vec.begin(),vec.end(),k)-vec.begin();
		//find函数三个参数 首地址、尾地址、常数
		//函数返回的是一个地址 
		cout<<pos+1<<endl;//题目下标从1开始 
	}
} 

HZNU OJ 2007
Description
大家都知道zz特别喜欢金鱼,一天zz去买金鱼,但是他只带了n元,他想买k种金鱼。(每种一条)如果钱不够他会向wxa借。已知每条金鱼的价格,你能告诉他最少他需要向wxa借多少吗?

Input
第一行输入一个T,代表有T组测试数据。

每组测试数据第一行输入n,k,m(0 < m < 1000)。接下来有一行,有m组数据,代表总共有m种金鱼。

Output
zz向wxa借的钱。

Samples
input
1
10 5 10
1 2 3 4 5 6 7 8 9 10
output
5

#include
#include
using namespace std;
const int maxn=1e5+10;
int a[maxn];
int main(){
     
	int T;
	cin>>T;
	while(T--){
     
		int n,k,m;
		cin>>n>>k>>m;
		for(int i=1;i<=m;++i){
     
			cin>>a[i];
		}
		sort(a+1,a+1+m);
		int sum=0;
		for(int i=1;i<=k;++i){
     
			if(n>=a[i]){
     
				n-=a[i];
			}
			else{
     
				a[i]-=n;
				n=0;
				sum+=a[i];
			}
		}
		cout<<sum<<endl;
	}	
}

HZNU OJ 2026
Description
众所周知,杭师acm的女神loy有很多很有趣的外号,比如泡面亚,打蛋亚,卫龙亚,萝卜亚等等。现在她想知道这些称号的好坏程度,但是苦于他的称号实在太多,所以想请聪明的你来帮她将这些称号排个序。

顺便说一下,Loy认为一个称号出现次数越多,则这个称号越好。

Input
输入第一行为一个整数t(t<10),其后有t组测试数据。对于每一组测试数据,第一行为一个整数n(n<100),代表其后有n行,每行有一个称号英文(不超过20个字符)和其出现次数,以空格分隔。

Output
按称号出现次数从多到少排序,保证出现次数不会存在相同值

Samples
input
1
3
EggYa 100
WeilongYa 50
ParrotYa 200
output
ParrotYa
EggYa
WeilongYa

#include
#include
#include
using namespace std;
const int maxn=1e5+10;
struct node{
     
	string name;
	int m;
}a[maxn];
bool cmp(node a,node b){
     
	return a.m>b.m;
}
int main(){
     
	int T;
	cin>>T;
	while(T--){
     
		int n;
		cin>>n;
		for(int i=1;i<=n;++i){
     
			cin>>a[i].name>>a[i].m;
		}
		sort(a+1,a+1+n,cmp);
		for(int i=1;i<=n;++i){
     
			cout<<a[i].name<<endl;
		}
	}
}

HZNU OJ 2031
Description
给你n个学生的3门考试的成绩,要求输出这三门课每门课中成绩最好的学生姓名和他在这三门课的成绩,然后按平均成绩从高到低输出所有学生信息,接着输出平均分高于80分的学生信息和其平均成绩。

Input
第一行为一个正整数n(n>=3),其后跟n行,每一行为一个学生的信息,包含学生姓名(最多9个字符),和学生三门课的成绩。

Output
前3行位这三门课中成绩最好的学生姓名和这三门课的成绩,其后n行按平均成绩从高到低输出学生信息,接下来几行为平均分高于80分的学生信息和其平均成绩。其中学生信息就是每行输入的信息。(每行数据间以逗号分隔,每块内容间输出一个回车,输出保留两位小数。)

Samples
input
5
zz 100 100 100
loy 90 80 70
yl 85 78.5 90
mwy 59 59.9 59.99
cjc 0 0 0
output
zz,100.00,100.00,100.00
zz,100.00,100.00,100.00
zz,100.00,100.00,100.00

zz,100.00,100.00,100.00
yl,85.00,78.50,90.00
loy,90.00,80.00,70.00
mwy,59.00,59.90,59.99
cjc,0.00,0.00,0.00

zz,100.00,100.00,100.00,100.00
yl,85.00,78.50,90.00,84.50

#include
#include
#include
#include
using namespace std;
const int maxn=1e5+10;
struct node{
     
	string name;
	double a,b,c;//三门课成绩
	double p;//平均分 
}stu[maxn];
bool cmp(node a,node b){
     
	return a.p>b.p;
}
int main(){
     
	int n;
	cin>>n;
	int maxa,maxb,maxc;//三门课最高的下标 
	int max1,max2,max3;
	for(int i=1;i<=n;++i){
     
		cin>>stu[i].name>>stu[i].a>>stu[i].b>>stu[i].c;
		stu[i].p=(stu[i].a+stu[i].b+stu[i].c)/3.0;
		if(i==1){
     
			max1=stu[i].a,max2=stu[i].b,max3=stu[i].c;
			maxa=maxb=maxc=1;
			continue;
		}
		if(stu[i].a>max1)
			max1=stu[i].a,maxa=i;
		if(stu[i].b>max2)
			max2=stu[i].b,maxb=i;
		if(stu[i].c>max3)
			max3=stu[i].c,maxc=i;
	} 
	cout<<stu[maxa].name<<",";
	cout<<fixed<<setprecision(2)<<stu[maxa].a<<",";
	cout<<fixed<<setprecision(2)<<stu[maxa].b<<",";
	cout<<fixed<<setprecision(2)<<stu[maxa].c<<endl;
	cout<<stu[maxb].name<<",";
	cout<<fixed<<setprecision(2)<<stu[maxb].a<<",";
	cout<<fixed<<setprecision(2)<<stu[maxb].b<<",";
	cout<<fixed<<setprecision(2)<<stu[maxb].c<<endl;
	cout<<stu[maxc].name<<",";
	cout<<fixed<<setprecision(2)<<stu[maxc].a<<",";
	cout<<fixed<<setprecision(2)<<stu[maxc].b<<",";
	cout<<fixed<<setprecision(2)<<stu[maxc].c<<endl;
	cout<<endl;
	
	sort(stu+1,stu+1+n,cmp);
	for(int i=1;i<=n;++i){
     
		cout<<stu[i].name<<",";
		cout<<fixed<<setprecision(2)<<stu[i].a<<",";
		cout<<fixed<<setprecision(2)<<stu[i].b<<",";
		cout<<fixed<<setprecision(2)<<stu[i].c<<endl;
	}
	cout<<endl;
	
	for(int i=1;i<=n;++i){
     
		if(stu[i].p<=80)
			break;
		cout<<stu[i].name<<",";
		cout<<fixed<<setprecision(2)<<stu[i].a<<",";
		cout<<fixed<<setprecision(2)<<stu[i].b<<",";
		cout<<fixed<<setprecision(2)<<stu[i].c<<",";
		cout<<fixed<<setprecision(2)<<stu[i].p<<endl;
	}
}

你可能感兴趣的:(Vector、Sort课后题解)