題目來源html
給定一系列正整數,請按要求對數字進行分類,並輸出如下 5 個數字:ios
每一個輸入包含 1 個測試用例。每一個測試用例先給出一個不超過 1000 的正整數 N,隨後給出 N 個不超過 1000 的待分類的正整數。數字間以空格分隔。數組
對給定的 N 個正整數,按題目要求計算 A1~A5 並在一行中順序輸出。數字間以空格分隔,但行末不得有多餘空格。測試
若其中某一類數字不存在,則在相應位置輸出 N
。spa
13 1 2 3 4 5 6 7 8 9 10 20 16 18
30 11 2 9.7 9
8 1 2 4 5 6 7 9 16
N 11 2 N 9
對輸入的每一個數字num進行mod 5,將獲得的值存放在下標爲 num % 5的數組中,每次添加一個數code
而後分別對每一個數組中保存的數字進行處理htm
#include <iostream> #include <algorithm> #include <vector> using namespace std; bool myCmp(int a, int b) { return a > b; } //數字分類 int main() { // a mod 5最大值爲4 int A1 = 0; //被 5 整除的數字中,偶數的和 int A2 = 0; //將被 5 除後餘 1 的數字按給出順序進行交錯求和,即計算n1 - n2 + n3 - n4... int A3 = 0; //被 5 除後餘 2 的數字的個數 double A4 = 0; //被 5 除後餘 3 的數字的平均數,精確到小數點後 1 位 int A5 = 0; //被 5 除後餘 4 的數字中最大數字 - 排序便可 int N; cin >> N; vector<vector<int> > vec(5, vector<int>(0)); int temp; for (int i = 0; i < N; ++i) { cin >> temp; vec[temp % 5].push_back(temp); } //求A1; int len = vec[0].size(); for (int i = 0; i < len; ++i) { if (vec[0][i] % 2 == 0) { A1 += vec[0][i]; } } //求A2 len = vec[1].size(); if (len != 0) { for (int i = 0; i < len; ++i) { if (i % 2 == 1) { //數組中的第偶數項,取負數 a[1], a[3], a[5] // n1 - n2 + n3 - n4 // 至關於a[0] - a[1] + a[2] - a[3]; vec[1][i] *= -1; } A2 += vec[1][i]; } } //求A3 A3 = vec[2].size(); //求A4 if (vec[3].size() != 0) { for (int i = 0; i < vec[3].size(); ++i) { A4 += vec[3][i]; } A4 /= vec[3].size(); } //求A5 if (vec[4].size() != 0) { sort(vec[4].begin(), vec[4].end(), myCmp); A5 = vec[4][0]; } for (int i = 0; i < 5; ++i) { if (i != 0) { cout << " "; //控制空格輸出 } if (i == 0 && A1 == 0 || i != 0 && vec[i].size() == 0) { cout << "N"; continue; } if (i == 0) { cout << A1; } else if (i == 1) { cout << A2; } else if (i == 2) { cout << A3; } else if (i == 3) { printf("%.1f", A4); } else if (i == 4) { cout << A5; } } return 0; }
求A1-A5的時候要判斷vector長度是否爲0,不然會發生段錯誤(越界)blog
求A5能夠直接從大到小排序,取第一個數字排序
輸出A4的時候用佔位符%.1lf控制輸出格式,精確到小數點後一位ip
循環中判斷條件 if (i == 0 && A1 == 0 || i != 0 && vec[i].size() == 0) 若是沒有 i == 0 && A1 == 0 ,若輸入0,輸出結果就會是0而不是N