数据表记录包含表索引和数值,请对表索引相同的记录进行合并,即将相同索引的数值进行求和运算,输出按照key值升序进行输出。
先输入键值对的个数
然后输入成对的index和value值,以空格隔开
输出合并后的键值对(多行)
方法1:
#include<iostream>
int main()
{
using namespace std;
int arr[10000] = { 0 };**//必须初始化为0**
int index, value, num;
while (cin >> num)
{
for (int i = 0; i < num; i++)
{
cin >> index >> value;
arr[index]+= value;
}
for (int i = 0; i < num; i++)
{
if (arr[i] != 0)
cout << i << " "<< arr[i] << endl;
}
}
return 0;
}
方法2:其实是一个去重排序
#include<iostream>
#include<string>
int main()
{
using namespace std;
int num, k, i, j, temp,temp2;
int index[1000], value[1000];
while (cin >> num)
{
for (i = 0; i < num; i++)
{
cin >> index[i] >> value[i];
}
for (i = 0; i < num; i++)
{
for (j = i + 1; j < num; j++)
{
if (index[i] == index[j])
{
value[i] = value[i] + value[j];
for (k = j + 1; k < num; k++)
{
index[k - 1] = index[k];
value[k - 1] = value[k];
}
num--;//这两行语句不能在循环中
j--;
}
}
}
//排序
for (i = 0; i < num - 1; i++)
{
for (j = 0; j < num - 1 - i; j++)
{
if (index[j] > index[j + 1])
{
temp = index[j];
index[j] = index[j + 1];
index[j + 1] = temp;
temp2 = value[j];
value[j] = value[j + 1];
value[j + 1] = temp2;
}
}
}
for (i = 0; i < num; i++)
cout << index[i] << " " << value[i] << endl;
}
return 0;
}