目录
1.前言
2.俩则题目
1.最厉害的学生(p5740)
1.题目描述
2.输入格式
3.输出格式
4.输入输出样例
5.题解
2. 明明的随机数
1.题目描述
2.输入格式
3.输出格式
4.输入输出样例
5.题解
3.小结
1.前言
哈喽大家好啊,今天继续为大家分享俩道洛谷的题目,希望大家多支持哦~
2.俩则题目
1.最厉害的学生(p5740)
1.题目描述
现有 N 名同学参加了期末考试,并且获得了每名同学的信息:姓名(不超过 8 个字符的仅有英文小写字母的字符串)、语文、数学、英语成绩(均为不超过 150 的自然数)。总分最高的学生就是最厉害的,请输出最厉害的学生各项信息(姓名、各科成绩)。如果有多个总分相同的学生,输出靠前的那位。
2.输入格式
第一行输入一个正整数 N,表示学生个数。
第二行开始,往下 N 行,对于每一行首先先输入一个字符串表示学生姓名,再输入三个自然数表示语文、数学、英语的成绩。均用空格相隔。
3.输出格式
输出最厉害的学生。
4.输入输出样例
5.题解
#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
const int N=1010;
char name[N][10];
int chin[N],math[N],engl[N],sum[N];
int main(){
int n=0;
int max1=0,summax1=0;
cin>>n;
for(int i=0;i<n;i++){
scanf("%s",name[i]);
scanf("%d%d%d",&chin[i],&math[i],&engl[i]);
sum[i]=chin[i]+math[i]+engl[i];
}
for(int j=0;j<n;j++){
if(sum[j]>summax1){
summax1=sum[j];
max1=j;
}
}
printf("%s %d %d %d",name[max1],chin[max1],math[max1],engl[max1]);
return 0;
}
大体思路:这道题用多个数组,结构体都可以,本题我使用的是多个数组进行处理的。创建一个二维数组用来记录名字(字符串数组),再分别开4个数组分别记录语文数学英语以及总成绩,找到最大输出即可,思路较为清晰,把握好细节即可。
2. 明明的随机数
1.题目描述
明明想在学校中请一些同学一起做一项问卷调查,为了实验的客观性,他先用计算机生成了 N 个 1 到 1000之间的随机整数 (N≤100),对于其中重复的数字,只保留一个,把其余相同的数去掉,不同的数对应着不同的学生的学号。然后再把这些数从小到大排序,按照排好的顺序去找同学做调查。请你协助明明完成“去重”与“排序”的工作。
2.输入格式
输入有两行,第 1 行为 1 个正整数,表示所生成的随机数的个数 N。
第 2 行有 N 个用空格隔开的正整数,为所产生的随机数。
3.输出格式
输出也是两行,第 1 行为 1 个正整数 M,表示不相同的随机数的个数。
第 2 行为 M 个用空格隔开的正整数,为从小到大排好序的不相同的随机数。
4.输入输出样例
5.题解
#include<iostream>
using namespace std;
int main(){
int n,x;
cin>>n;
int sum(0),bus[1002]={0};
for(int i=1;i<=n;i++){
cin>>x;
if(bus[x])
continue;
bus[x]++;
sum++;
}
cout<<sum<<endl;
for(int i=1;i<=1000;i++)
if(bus[i])
cout<<i<<' ';
cout<<endl;
return 0;
}
大体思路:这道题虽然没有那么的复杂,但是这个思路还是比较巧妙的。在利用第一个for循环的同时判断该数是否第一次出现,如果未出现,就将其下标记录,并将该数标记,下一次再遇到这个数的时候便可continue,最后输出即可,这样的记录方法是默认从小到大,比较方便(得益于本题n的取值较小且均为正整数)。
3.小结
今天的分享到这里就结束咯,希望能得大家有所帮助哦~