• PAT 乙级 1038 统计同成绩的学生C++版


    1038. 统计同成绩学生(20)

    时间限制
    250 ms
    内存限制
    65536 kB
    代码长度限制
    8000 B
    判题程序
    Standard
    作者
    CHEN, Yue

    本题要求读入N名学生的成绩,将获得某一给定分数的学生人数输出。

    输入格式:

    输入在第1行给出不超过105的正整数N,即学生总人数。随后1行给出N名学生的百分制整数成绩,中间以空格分隔。最后1行给出要查询的分数个数K(不超过N的正整数),随后是K个分数,中间以空格分隔。

    输出格式:

    在一行中按查询顺序给出得分等于指定分数的学生人数,中间以空格分隔,但行末不得有多余空格。

    输入样例:
    10
    60 75 90 55 75 99 82 90 75 50
    3 75 90 88
    
    输出样例:
    3 2 0

    下面是自己用C++做出的结果,可惜的是运行时间太长
     1 // 1038.cpp : 定义控制台应用程序的入口点。
     2 //
     3 
     4 #include "stdafx.h"
     5 #include<iostream>
     6 #include<algorithm>
     7 #include<vector>
     8 
     9 using namespace std;
    10 
    11 int main()
    12 {
    13     int N,grade;
    14     vector<int> v;
    15 
    16     cin >> N;
    17 
    18     for (int i = 0; i < N; i++)
    19     {
    20         cin >> grade;
    21 
    22         v.push_back(grade);
    23     }
    24 
    25     int K;
    26 
    27     cin >> K;
    28 
    29     int *q = new int[K];
    30 
    31     vector<int>::iterator begin = v.begin(), end = v.end();
    32 
    33     for (int i = 0; i < K; i++)
    34     {
    35         cin >> q[i];
    36 
    37         cout << count(begin, end, q[i]);
    38 
    39         if (i != K - 1)
    40             cout << " ";
    41     }
    42 
    43     delete[] q;
    44 
    45     return 0;
    46 }

    将该代码放置到平台后会出现下图所示结果,目测是for循环和count函数组成的双重for循环导致效率较低

    没得办法,只能在网上找到一个新的方法,用成绩分数作为数组下标,此方法虽然只用了一重循环解决问题,但是浪费了大量的内存

    代码如下

     1 // 1038_1.cpp : 定义控制台应用程序的入口点。
     2 //
     3 
     4 #include "stdafx.h"
     5 #include<iostream>
     6 
     7 using namespace std;
     8 
     9 int main()
    10 {
    11     int N, a[101] = { 0 },grade,K;
    12 
    13     cin >> N;
    14 
    15     for (int i = 0; i < N; i++)
    16     {
    17         cin >> grade;
    18 
    19         a[grade]++;
    20     }
    21 
    22     cin >> K;
    23 
    24     for (int i = 0; i < K; i++)
    25     {
    26         cin >> grade;
    27 
    28         cout << a[grade];
    29 
    30         if (i != K - 1)
    31             cout << " ";
    32     }
    33 
    34     return 0;
    35 }

    结果就通过了

    对比:在数量较小的时候用方法一效果更好,节省内存,一旦数量较多,则第二种较好,寻址方便

  • 相关阅读:
    Xshell添加快捷按钮
    Go语言基础之21--反射
    Jenkins自动化CI CD流水线之7--流水线自动化发布PHP项目
    Jenkins自动化CI CD流水线之6--构建邮件状态通知
    Jenkins自动化CI CD流水线之5--pipeline
    Python练习-函数(方法)的定义和应用
    Python文件操作-文件的增删改查
    Python练习-不知道弄个什么鬼
    Python练习-短小精干版三级"片儿"
    Python练习-三级菜单与"片儿"无关!
  • 原文地址:https://www.cnblogs.com/cdp1591652208/p/7133796.html
Copyright © 2020-2023  润新知