1038 統計同成績學生 (20 分)

  • 2019 年 10 月 7 日
  • 筆記

1038 統計同成績學生 (20 分)

本題要求讀入 N 名學生的成績,將獲得某一給定分數的學生人數輸出。

輸入格式:

輸入在第 1 行給出不超過 105 的正整數 N,即學生總人數。隨後一行給出 N 名學生的百分制整數成績,中間以空格分隔。最後一行給出要查詢的分數個數 K(不超過 N 的正整數),隨後是 K 個分數,中間以空格分隔。

輸出格式:

在一行中按查詢順序給出得分等於指定分數的學生人數,中間以空格分隔,但行末不得有多餘空格。

輸入樣例:

10  60 75 90 55 75 99 82 90 75 50  3 75 90 88  

輸出樣例:

3 2 0

【我的程式碼】

// 1038 統計同成績學生 (20 分).cpp : 此文件包含 "main" 函數。程式執行將在此處開始並結束。  //    #include <iostream>  #include <stdio.h>  using namespace std;  int main()  {      int num_stu;//學生總人數      scanf("%d", &num_stu);      int a[101] = { 0 };//成績數組      int tmp;      for (int i = 0; i < num_stu; i++) {          scanf("%d", &tmp);          a[tmp]++;      }      int num;//查找個數      scanf("%d", &num);      int temp;      for (int i = 0; i < num; i++) {          scanf("%d", &temp);          cout << a[temp];          if (i != num -1)              cout << " ";      }      return 0;  }  

【總結】

  1. 很常規的一個數組運用的問題,巧妙地利用索引帶來地查找便利,畢竟數組通過索引查找的時間複雜度是O(1)呢!
  2. 第一次提交失敗,錯在0-100,總共101個數,我只申請了100的數組空間。改完這個錯後還剩最後一個測試點沒通過,原因是超時了。
  3. 方法用的已經很巧妙,為啥還會超時呢?哎。。果然cin,cout還是很耗時,直接全部改成scanf就完全通過了。不要再使用cin了!