【HJ8】合併表記錄
阿新 • • 發佈:2021-01-02
題目描述
資料表記錄包含表索引和數值(int範圍的正整數),請對錶索引相同的記錄進行合併,即將相同索引的數值進行求和運算,輸出按照key值升序進行輸出。
輸入描述:
先輸入鍵值對的個數
然後輸入成對的index和value值,以空格隔開
輸出描述:
輸出合併後的鍵值對(多行)
示例1
輸入
4
0 1
0 2
1 2
3 4
輸出
0 3
1 2
3 4
題解思路
讀完題目,就想到利用陣列儲存索引 index 和 value 值,至於對相同索引的數值求和,每次輸入鍵值對時作求和即可。思路和求相同字元個數類似。
程式碼實現
#include <iostream>
int main()
{
using namespace std;
int N;
cin >> N; // 輸入鍵值對的個數
int sum[1000] = {0};
int index, value;
for(int i = 0; i < N; ++i) {
cin >> index >> value;
sum[index] += value;
}
for(int i = 0; i < 1000; ++i) {
if(sum[i] != 0) {
cout << i << " " << sum[i] << endl;
}
}
return 0;
}
利用 C++ map 程式碼實現如下:
#include <iostream>
#include <map>
int main()
{
using namespace std;
map<int, int> sum;
int N;
cin >> N; // 輸入鍵值對的個數
int index, value;
for(int i = 0; i < N; ++i) {
cin >> index >> value;
sum[index] += value;
}
for(auto it = sum.begin(); it != sum.end(); ++it) {
cout << it->first << " " << it->second << endl;
}
return 0;
}