列表

详情


HJ8. 合并表记录

描述

数据表记录包含表索引index和数值value(int范围的正整数),请对表索引相同的记录进行合并,即将相同索引的数值进行求和运算,输出按照index值升序进行输出。


提示:
0 <= index <= 11111111
1 <= value <= 100000

输入描述

先输入键值对的个数n(1 <= n <= 500)
接下来n行每行输入成对的index和value值,以空格隔开

输出描述

输出合并后的键值对(多行)

示例1

输入:

4
0 1
0 2
1 2
3 4

输出:

0 3
1 2
3 4

示例2

输入:

3
0 1
0 2
8 9

输出:

0 3
8 9

原站题解

上次编辑到这里,代码来自缓存 点击恢复默认模板

C 解法, 执行用时: 1ms, 内存消耗: 256KB, 提交时间: 2020-07-07

#include "stdio.h"
int main()
{
    int n,a,b,i=0,num[1000]={0};
    while(scanf("%d",&n)!= EOF )
    {
        for(i=0;i<n;i++)
        {
        scanf("%d %d",&a,&b);
        num[a]+=b;
        }
        for(i=0;i<n;i++)
        {
            if(num[i]==0)
                continue;
            else
                printf("%d %d\n",i,num[i]);
        }
    }
    return 0; 
}

Pascal 解法, 执行用时: 1ms, 内存消耗: 256KB, 提交时间: 2020-02-29

var
    arr: array[0..1000] of Integer;
    i, iCount, iKey, iValue: Integer;
begin
    while not Eof do
    begin
        readln(iCount);
        if iCount > 0 then
        begin
            //for i := 0 to length(arr) do
            //    arr[i] := 0;
            fillchar(arr, sizeof(arr), 0);    
            for i := 1 to iCount do
            begin
                readln(iKey, iValue);
                arr[iKey] := arr[iKey] + iValue;
            end;
            
            for i := 0 to length(arr) - 1 do
                if arr[i] <> 0 then
                    writeln(i, ' ', arr[i]);
        end;
    end;
end.

上一题