009-合并表记录

来源:互联网 发布:拍一部网络剧要多少钱 编辑:程序博客网 时间:2024/05/16 14:19
/* 008-合并表记录题目描述数据表记录包含表索引和数值,请对表索引相同的记录进行合并,即将相同索引的数值进行求和运算,输出按照key值升序进行输出。输入描述:先输入键值对的个数然后输入成对的index和value值,以空格隔开输出描述:输出合并后的键值对(多行)输入例子:40 10 21 23 4输出例子:0 31 23 4*///C语言版#include <stdio.h> #define N  500struct data{int index;int value;};void showTable(struct data *tb,int n);int main(void){int num,i,j;int count = 0;int flag ;struct data table[N];scanf("%d",&num);scanf("%d %d",&table[0].index,&table[0].value);struct data tmp;for(i = 1;i < num;i++){scanf("%d %d",&tmp.index,&tmp.value);flag = 0; //保证下一次读取时flag = 0//判断是否与前面的index值相同 for(j = 0;j <= count;j++){if(tmp.index == table[j].index){table[j].value += tmp.value; //相同就value相加 flag = 1;break ;}}//不同就加入该数据项 if(!flag){count++;table[count].index = tmp.index;table[count].value = tmp.value;}}showTable(table,count + 1);return 0;}void showTable( struct data *tb,int n){int i,j;struct data min = tb[0]; //先根据index升序排序 for(i = 0;i < n - 1;i++){for(j = i + 1;j < n;j++){if(tb[i].index > tb[j].index){min = tb[j];tb[j] = tb[i];tb[i] = min;}}}//输出for(i = 0;i < n;i++) { printf("%d %d\n",tb[i].index,tb[i].value); } }

0 0
原创粉丝点击