1. 程式人生 > 其它 >【HJ8】合併表記錄

【HJ8】合併表記錄

技術標籤:《牛客刷題》系列c++演算法

題目描述

資料表記錄包含表索引和數值(int範圍的正整數),請對錶索引相同的記錄進行合併,即將相同索引的數值進行求和運算,輸出按照key值升序進行輸出。

輸入描述:
先輸入鍵值對的個數
然後輸入成對的index和value值,以空格隔開

輸出描述:
輸出合併後的鍵值對(多行)

示例1

輸入
4
0 1
0 2
1 2
3 4
輸出
0 3
1 2
3 4

題解思路

讀完題目,就想到利用陣列儲存索引 indexvalue 值,至於對相同索引的數值求和,每次輸入鍵值對時作求和即可。思路和求相同字元個數類似。

程式碼實現

#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; }

結果