思路

注意: 输出时,分号使用中文,最好直接赋值,虽然输出数字一致,但是字符串会和答案不匹配

  1. 创建存储名字和票数的结构体
  2. 获得候选人和投票的数据
  3. 循环比较候选人和投票人的名字是否一致,一致则将票数加1
  4. 同时减少1个投票人数,剩余的则为不匹配的人数量
  5. 按照题目要求输出结果

Answer

#include<stdio.h>
#include<string.h>

struct {

    char strName[200];
    int num;

} data[200], str2[200];

int main() {
    int num, cnt;

    scanf("%d", &num);

    for (int i = 0; i < num; i++) {
        scanf("%s", data[i].strName); //存候选人名字
    }
    scanf("%d", &cnt);
    for (int i = 0; i < cnt; i++) {
        scanf("%s", str2[i].strName); //存候选人名字
    }
    // 在投票中找和候选人相同的名字计数
    for (int i = 0; i < num; i++) {
        data[i].num = 0;
    }
    int len=cnt;
    for (int i = 0; i < num; i++) {
        for (int j = 0; j < cnt; j++) {
            if (strcmp(str2[j].strName, data[i].strName) == 0) {
                data[i].num++;
                len--;
            }
        }
    }

    for (int i = 0; i < num; i++) {
        //输出有效票数
        printf("%s : %d\n",data[i].strName,data[i].num);
    }
    printf("Invalid : %d\n",len);
    return 0;
}