QQ圖片20220210112022.png
題目解析
此題對(duì)于剛?cè)腴T信競(jìng)的學(xué)生來說會(huì)存在一定的難度,因?yàn)樗鼘?strong>函數(shù)呀邢、排序、動(dòng)態(tài)數(shù)組這幾個(gè)重要概念進(jìn)行了綜合考察豹绪。
編程解題价淌,隨著題目難度的增加,我們要養(yǎng)成習(xí)慣瞒津,寫代碼前先理清思路蝉衣,列出算法步驟,每一步解決一個(gè)問題仲智。最后买乃,我們?cè)侔凑詹襟E一步步去用代碼實(shí)現(xiàn)。
我們就以此題為例钓辆,首先列出算法步驟:
- 讀取輸入
- 算出每個(gè)學(xué)生的編號(hào)
的和
,將它們保存到對(duì)應(yīng)的動(dòng)態(tài)數(shù)組中肴焊。
2.1 此處前联,計(jì)算各位數(shù)字之和,我們可以使用一個(gè)函數(shù)來實(shí)現(xiàn)功能娶眷,代碼會(huì)更加簡(jiǎn)潔和清晰似嗤。
2.2 我們?cè)鯓釉O(shè)置一個(gè)動(dòng)態(tài)數(shù)組保存呢? 觀察題目届宠,正整數(shù)最大值為
烁落,那么各位數(shù)字之和的最大值是不是
這個(gè)情況乘粒,也就是 54, 那么聲明 55 個(gè)元素的數(shù)組就可以啦伤塌,數(shù)組又分別是一個(gè)動(dòng)態(tài)數(shù)組灯萍,(對(duì)于新手)這里請(qǐng)仔細(xì)思考和理解。
- 根據(jù)求出的和每聪,把每個(gè)編號(hào)
保存到對(duì)應(yīng)的動(dòng)態(tài)數(shù)組旦棉,最后再遍歷這 55 個(gè)元素,找出元素最多的動(dòng)態(tài)數(shù)組药薯,元素同樣多選組號(hào)最小的绑洛。
- 對(duì)該組進(jìn)行從大到小的排序。
- 輸出結(jié)果童本。
根據(jù)這個(gè)步驟真屯,我們可以寫出以下代碼:
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
int sum(int x){ // 對(duì)編號(hào) a 求和的函數(shù)
int SUM = 0;
while(x > 0){
SUM += x % 10;
x /= 10;
}
return SUM;
}
int main(){
int n;
cin >> n;
int stu[n];
for(int i=0; i<n; i++){
cin >> stu[i];
}
vector<int> group[55]; // 動(dòng)態(tài)數(shù)組的數(shù)組,根據(jù)編號(hào)a的和進(jìn)行保存
for(int i=0; i<n; i++){
int SUMM = sum(stu[i]);
group[SUMM].push_back(stu[i]);
}
int Max_num = 0;
int group_id = 0;
for(int i=1; i<=54; i++){
if(group[i].size() > Max_num){
Max_num = group[i].size();
group_id = i;
}
}
sort(group[group_id].begin(),group[group_id].end(), greater<int>()); // 排序
cout << group_id << endl;
for(int i=0; i<group[group_id].size();i++){
cout << group[group_id][i] << " ";
}
return 0;
}