关于#c++#的问题:编写一个投票程序,每张选票只能填写一个人的名字,再依次输入n个选票中被选人的姓名,然后输出得票最高者姓名(可多人并列,先达到票数的排在前面)

编写一个投票程序,每张选票只能填写一个人的名字,输入n(n<100),再依次输入n个选票中被选人的姓名,然后输出得票最高者姓名(可多人并列,先达到票数的排在前面)。

#include 
#include"string.h"
struct SPerson
{
 char name[20];    //姓名
 int num;          //的票数 
}stu[20];
int main()
{
    int i,j,n,m=0,x[20]={0};char b[20]={0};
    scanf("%d",&n);
    for(i=0;iscanf("%s",stu[i].name);stu[i].num=0;}
    for(i=0;ifor(j=0;jif(strcmp(stu[i].name,stu[j].name)==0) stu[i].num++;}
    for(i=0;ifor(j=0;jif(stu[i].num>=stu[j].num) x[i]++;m++ ;} j=0;
     for(i=0;iif(x[i]==n) { strcpy(b[j],stu[i].name);j++;}
     for(j=0;jprintf("%s",b[j]);
     return 0;
}
为什么没有用


我改了一下,你看看

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

struct SPerson
{
    char name[20]; // 姓名
    int num;       // 票数
} stu[100];        // 将数组大小改为100,因为n<100

int main()
{
    int i, j, n, max_vote = 0;
    scanf("%d", &n);
    for (i = 0; i < n; i++)
    {
        scanf("%s", stu[i].name);
        stu[i].num = 0;
    }

    // 计算每个人的票数
    for (i = 0; i < n; i++)
    {
        for (j = 0; j < n; j++)
        {
            if (strcmp(stu[i].name, stu[j].name) == 0)
            {
                stu[i].num++;
            }
        }
    }

    // 找到最高票数
    for (i = 0; i < n; i++)
    {
        if (stu[i].num > max_vote)
        {
            max_vote = stu[i].num;
        }
    }

    // 输出得票最高者的姓名
    for (i = 0; i < n; i++)
    {
        if (stu[i].num == max_vote)
        {
            printf("%s\n", stu[i].name);
        }
    }

    return 0;
}


然后,你最好加一个东西就是检查来确保输入的候选人姓名是唯一的。

这么改,供参考:

#include <stdio.h>
#include <string.h>
struct SPerson
{
     char name[20];    //姓名
     int num;          //的票数
}stu[100];//修改
int main()
{
    int i,j,k,n,max=0; //修改
    char x[20]={0};
    scanf("%d",&n);
    for(i=0,k=0;i<n;i++)  //输入n张选票被选人的姓名,自动计入被选人的票数
    {
        scanf("%s",x);
        for (j = 0;j < k; j++)
        {
            if (!strcmp(stu[j].name, x)){
                stu[j].num++;
                break;
            }
        }
        if (j == k){  //被选人名字第一次出现时
            strcpy(stu[k].name,x);
            stu[k].num = 1;
            k++;
        }
    }
    for(i=0,max=stu[i].num;i<k;i++){ //查到最高票数值
        if(max < stu[i].num)
            max = stu[i].num;
    }
    for(i=0;i<k;i++) //输出最高票数者名字
    {
        if(stu[i].num == max)
            printf("%s\n",stu[i].name);
    }
    return 0;
}

不知道你这个问题是否已经解决, 如果还没有解决的话:

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^