数据表记录包含表索引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
一拿到手有点不知所措,慢慢理清思路后,在数据合并时一直卡住
总想找到一个好的办法解决合并数据后剩下的无用数据怎么处理,最终还是妥协了合并后直接清楚的办法,再用冒泡法排序。
#include <stdio.h>
int main() {
int i,j,k,n,m;
int array[500][2]={0};
int a=0,b=0,count=0;
scanf("%d",&n);
m=n;
int result[][2]={0};
for(i=0;i<n;i++)
{
for(j=0;j<2;j++)
{
scanf("%d",&array[i][j]);
}
}
for(i=0;i<m-1;i++)
{
for(j=i+1;j<m;j++)
{
if(array[j][0]==array[i][0])
{
array[i][1]+=array[j][1];
for(k=j;k<m-1;k++)
{
array[k][0]=array[k+1][0];
array[k][1]=array[k+1][1];
}
m--; //合并后减作用域比较重要
j--;
}
}
}
for(i=0;i<m;i++)
{
for(j=0;j<m-1;j++)
{
if(array[j][0]>array[j+1][0])
{
a=array[j+1][0];
b=array[j+1][1];
array[j+1][0]=array[j][0];
array[j+1][1]=array[j][1];
array[j][0]=a;
array[j][1]=b;
}
}
}
for(i=0;i<m;i++)
{
printf("%d %d\n",array[i][0],array[i][1]);
}
return 0;
}