1. 程式人生 > >程式設計題(合併表記錄)

程式設計題(合併表記錄)

合併表記錄

題目描述:

資料表記錄包含表索引和數值,請對錶索引相同的記錄進行合併,即將相同索引的數值進行求和運算,輸出按照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個鍵值對處理完畢後,就可以輸出最後的結果了。