题解 | #合并表记录#
合并表记录
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;
}
}
