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


    目录

    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.题解

    1. #include
    2. #include
    3. #include
    4. using namespace std;
    5. const int N=1010;
    6. char name[N][10];
    7. int chin[N],math[N],engl[N],sum[N];
    8. int main(){
    9. int n=0;
    10. int max1=0,summax1=0;
    11. cin>>n;
    12. for(int i=0;i
    13. scanf("%s",name[i]);
    14. scanf("%d%d%d",&chin[i],&math[i],&engl[i]);
    15. sum[i]=chin[i]+math[i]+engl[i];
    16. }
    17. for(int j=0;j
    18. if(sum[j]>summax1){
    19. summax1=sum[j];
    20. max1=j;
    21. }
    22. }
    23. printf("%s %d %d %d",name[max1],chin[max1],math[max1],engl[max1]);
    24. return 0;
    25. }

    大体思路:这道题用多个数组,结构体都可以,本题我使用的是多个数组进行处理的。创建一个二维数组用来记录名字(字符串数组),再分别开4个数组分别记录语文数学英语以及总成绩,找到最大输出即可,思路较为清晰,把握好细节即可。

    2. 明明的随机数

    1.题目描述

    明明想在学校中请一些同学一起做一项问卷调查,为了实验的客观性,他先用计算机生成了 N 个 1 到 1000之间的随机整数 (N≤100),对于其中重复的数字,只保留一个,把其余相同的数去掉,不同的数对应着不同的学生的学号。然后再把这些数从小到大排序,按照排好的顺序去找同学做调查。请你协助明明完成“去重”与“排序”的工作。

    2.输入格式

    输入有两行,第 1 行为 1 个正整数,表示所生成的随机数的个数 N。

    第 2 行有 N 个用空格隔开的正整数,为所产生的随机数。

    3.输出格式

    输出也是两行,第 1 行为 1 个正整数 M,表示不相同的随机数的个数。

    第 2 行为 M 个用空格隔开的正整数,为从小到大排好序的不相同的随机数。

    4.输入输出样例

     5.题解

    1. #include
    2. using namespace std;
    3. int main(){
    4. int n,x;
    5. cin>>n;
    6. int sum(0),bus[1002]={0};
    7. for(int i=1;i<=n;i++){
    8. cin>>x;
    9. if(bus[x])
    10. continue;
    11. bus[x]++;
    12. sum++;
    13. }
    14. cout<
    15. for(int i=1;i<=1000;i++)
    16. if(bus[i])
    17. cout<' ';
    18. cout<
    19. return 0;
    20. }

    大体思路:这道题虽然没有那么的复杂,但是这个思路还是比较巧妙的。在利用第一个for循环的同时判断该数是否第一次出现,如果未出现,就将其下标记录,并将该数标记,下一次再遇到这个数的时候便可continue,最后输出即可,这样的记录方法是默认从小到大,比较方便(得益于本题n的取值较小且均为正整数)。

    3.小结

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

  • 相关阅读:
    ethtool netlink 框架原理浅析
    在外包干了2年,我悟了...
    日报系统:优化能源行业管理与决策的利器
    32、Java——迷你图书管理器(对象+JDBC)
    SpringCloud Alibaba
    Zookeeper: 配置参数解读
    pandas DataFrame内存优化技巧:让数据处理更高效
    linux clickhouse 密码设置
    Android Camera MIPI接口知识总结
    pclpy 可视化点云(多窗口可视化、单窗口多点云可视化)
  • 原文地址:https://blog.csdn.net/2301_81073317/article/details/138168234