C语言洛谷题目分享(10)最厉害的学生和明明的随机数

发布于:2024-04-24 ⋅ 阅读:(29) ⋅ 点赞:(0)

目录

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.小结

今天的分享到这里就结束咯,希望能得大家有所帮助哦~