1. 程式人生 > 實用技巧 >PTA 乙級 1038 統計同成績學生 (20分) C/C++

PTA 乙級 1038 統計同成績學生 (20分) C/C++

本以為挺簡單的,隨便寫了寫,然後就有了第一個版本

注意本題輸入輸出一定不要用cin,cout,要用scanf,printf(否則更容易超時)

C/C++

 1 #include<iostream>
 2 #include<vector>
 3 
 4 using namespace std;
 5 
 6 int main() {
 7     int n = 0, k = 0;
 8     int flag = 0;
 9     int search = 0;
10     int num = 0;
11     cin >> n;
12     vector<int
> grad(n); 13 for (int i = 0; i < n; ++i) cin >> grad[i]; 14 cin >> k; 15 for (int i = 0; i < k; ++i) { 16 cin >> search; 17 for (int j = 0; j < n; ++j) { 18 if (search == grad[j])num++; 19 } 20 if (flag)cout << "
"; 21 cout << num; 22 num = 0; 23 flag = 1; 24 } 25 return 0; 26 }

然後最後一個測試點超時。。。

所以,換一種思路吧

 1 #include<iostream>
 2 
 3 using namespace std;
 4 
 5 int main() {
 6     int n = 0, k = 0;    
 7     /*當前輸入成績*/
 8     int tmp = 0;
 9     /*空格輸出標誌位*/
10     int flag = 0
; 11 /*0~100分數陣列*/ 12 int grad[101] = { 0 }; 13 scanf_s("%d", &n); 14 for (int i = 0; i < n; ++i) { 15 scanf_s("%d", &tmp); 16 if (tmp <= 100 && tmp >= 0) //輸入的成績對應陣列元素累加 17 grad[tmp]++; 18 } 19 scanf_s("%d", &k); 20 for (int i = 0; i < k; ++i) { 21 scanf_s("%d", &tmp); 22 if (flag)printf(" "); 23 printf("%d", grad[tmp]); //直接輸出所查詢同成績的個數 24 flag = 1; 25 } 26 return 0; 27 }

感覺本題就是為C準備的,用其他語言更容易超時