题解 | #合并表记录#
合并表记录
https://www.nowcoder.com/practice/de044e89123f4a7482bd2b214a685201
#include <stdio.h> typedef struct HashTable { int index; int value; }HashTable; HashTable hashTable[500]={0}; int FindHashTableByIndex(int index); void InitHashTable(); void SortHashTableByIndex(int length); int main() { int n, ids, val, new_id=0; /* 初始化哈希表 */ InitHashTable(); /* 哈希表新增数据 */ scanf("%d", &n); for(int i=0;i<n;i++) { scanf("%d", &ids); scanf("%d", &val); int res = FindHashTableByIndex(ids); if(res>=0) { hashTable[res].value += val; } else { hashTable[new_id].index = ids; hashTable[new_id++].value += val; } } /* 哈希表排序 */ SortHashTableByIndex(new_id); /* 哈希表打印 */ for(int i=0;i<new_id;i++) { printf("%d ", hashTable[i].index); printf("%d\n", hashTable[i].value); } return 0; } int FindHashTableByIndex(int index) { int i=0; while((hashTable[i].index != index) && i<500) { i++; } if(i<500) return i; else return -1; } void InitHashTable() { for(int i=0;i<500;i++) { hashTable[i].index = -1; hashTable[i].value = 0; } } void SortHashTableByIndex(int length) { int flag = 0; for(int i=0;i<length-1;i++) { flag = 0; for(int j=0;j<length-i-1;j++) { if(hashTable[j].index > hashTable[j+1].index) { HashTable temp = hashTable[j]; hashTable[j] = hashTable[j+1]; hashTable[j+1] = temp; flag = 1; } } if(!flag) break; } }