程式設計題(合併表記錄)
阿新 • • 發佈:2018-11-10
合併表記錄
題目描述:
資料表記錄包含表索引和數值,請對錶索引相同的記錄進行合併,即將相同索引的數值進行求和運算,輸出按照key值升序進行輸出。
輸入描述:
先輸入鍵值對的個數,然後輸入成對的index和value值,以空格隔開
輸出描述:
輸出合併後的鍵值對,多行
示例1:
輸入
4
0 1
0 2
1 2
2 3
輸出
0 3
1 2
2 3
程式一
#include <stdio.h> int main() { int a[1000]={0}; int index,value; int n,i; while(scanf("%d",&n)!=EOF) /*當輸入的個數超過n後,就會結束while迴圈*/ { for(i=0;i<n;i++){ scanf("%d %d ",&index,&value); a[index]+=value; } for(i=0;i<1000;i++){/*只輸出對應的值不為零的部分,為零的說明陣列中的這些地方未被賦值*/ if(a[i]!=0){/*有一個bug,當某一個索引號對應的值相加剛好為零時,這個值會被當做無效值而不記錄*/ printf("%d %d\n",i,a[i]); } } } }
程式二
#include <iostream> #include <map> using namespace std; int main() { int n; while(cin>>n){ map<int ,int > m; while(n--){ int key,value; cin>>key>>value; if(!m[key]){ m[key]=value; } else m[key]+=value; } for (map<int,int>::iterator it=m.begin();it!=m.end();it++) { cout<<it->first<<" "<<it->second<<endl; } } return 0; }
程式一是用C語言的寫法,程式二是C++的寫法,使用map來存放一個索引對,首先輸入n值來確定一共有多少對索引,然後將這n個鍵值對全部輸入,並對每個索引值是否已經存在進行判斷,若存在則在當前的值上進行相加,若不存在,就建立一個新的值。當這n個鍵值對處理完畢後,就可以輸出最後的結果了。