用c语言写一个程序。号称具有人工智能的机器人,至少应该能分辨出新人和老朋友,所以打招呼的时候应该能有所区别。本题就请你为这个人工智能机器人实现这个功能:当它遇到陌生人的时候,会说:“Hello X, how are you?”其中 X 是这个人的称呼;而当它再次遇到这个人的时候,会说:“Hi X! Glad to see you again!” 输入格式: 输入首先在第一行中给出一个正整数 N(≤10 5 ),随后一行给出 N 个人的编号。即简单起见,我们把每个人的称呼 X 用一个 5 位整数来替代。 输出格式: 对于每个人的编号,按照题面要求在一行中输出人工智能机器人打招呼的内容。 输入样例: 7 00000 99999 00000 12345 00000 12345 00000 输出样例: Hello 00000, how are you? Hello 99999, how are you? Hi 00000! Glad to see you again! Hello 12345, how are you? Hi 00000! Glad to see you again! Hi 12345! Glad to see you again! Hi 00000! Glad to see you again!
时间: 2024-04-15 20:28:58 浏览: 20
可以使用C语言的哈希表(hash table)来实现这个功能。首先,我们定义一个结构体来表示机器人遇到的每个人:
```c
typedef struct {
int id;
int count;
char greeting[30];
} Person;
```
然后,我们可以使用哈希表来存储遇到的人和对应的信息。我们可以使用一个数组来表示哈希表,数组的索引是人的编号,数组元素是Person结构体。例如,对于输入样例中的7个人,我们可以定义一个大小为100000的Person类型数组:
```c
Person hashTable[100000];
```
接下来,我们可以编写一个函数来处理机器人遇到新人的情况,更新哈希表中的信息:
```c
void processNewPerson(int id, char name[]) {
if (hashTable[id].count == 0) {
sprintf(hashTable[id].greeting, "Hello %s, how are you?", name);
}
else {
sprintf(hashTable[id].greeting, "Hi %s! Glad to see you again!", name);
}
hashTable[id].count++;
}
```
最后,我们可以遍历输入的人的编号,并调用processNewPerson函数来处理每个人:
```c
int main() {
int N;
scanf("%d", &N);
for (int i = 0; i < N; i++) {
int id;
char name[6];
scanf("%d", &id);
sprintf(name, "%.5d", id);
processNewPerson(id, name);
printf("%s\n", hashTable[id].greeting);
}
return 0;
}
```
这样,程序就可以根据输入的人的编号输出机器人的打招呼内容了。注意,为了保证输出的格式与样例一致,我们在输出之前先调用processNewPerson函数更新哈希表中的信息。
希望这个程序能满足您的要求!如果还有其他问题,请随时提问。