题目
数据表记录包含表索引和数值,请对表索引相同的记录进行合并,即将相同索引的数值进行求和运算,输出按照key值升序进行输出。
要求
- 输入描述:先输入键值对的个数,然后输入成对的index和value值,以空格隔开
- 输出描述:输出合并后的键值对(多行)
设计思路
本道题的目的是对相同的表索引求和并按表索引升序排序。按照题目思路是先合并再进行排序。但由于输入的表索引是杂乱无章的,很难进行系统的合并,特别容易疏漏,所以直接合并就显得似乎有些困难。但如果先对表索引进行排序的话,只有临近的表索引才有可能相同,这样就比较容易合并,不会有遗漏。所以先排序再合并,这样的思路也比较清晰,编写起来也相对简单,代码比较简洁。
模块设计
- 升序排序 采用冒泡法对表索引进行升序排序
- 合并数值 先比较两个的表索引是否相等,如果相等,第二个数值就等于前一个数值加上它本身,并指向下一个表索引,这样数值就合并了,如果不相等,则依次输出表索引和数值
- 输出数据 采用一边比较表索引一边按相应格式输出表索引和数值的方法
源程序清单
#include<stdio.h>
int main()
{
/*定义变量*/
int index[1000],value[1000];
int i,j,n;
int temp1,temp2;
printf("请输入表格行数:\n");
while(scanf("%d",&n)!=EOF)
{
printf("请输入表格数据:\n");
for(i=0;i<n;i++)
{
/*输入数据*/
scanf("%d%d",&index[i],&value[i]);
}
for(i=0;i<n-1;i++)
{
for(j=i+1;j<n;j++)
{
/*冒泡法排序*/
if(index[i]>index[j])
{
temp1=index[i];
index[i]=index[j];
index[j]=temp1;
temp2=value[i];
value[i]=value[j];
value[j]=temp2;
}
}
}
printf("\n");
printf("结果为:\n");
for(i=0;i<n;i++)
{
/*合并相同表索引的数值*/
while(i<n&&index[i]==index[i+1])
{
value[i+1]=value[i]+value[i+1];
i++;
}
/*按格式输出数据*/
printf("%d %d\n",index[i],value[i]);
}
}
return 0;
}
最终程序效果

