关于##include#的问题,如何解决?

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

#include 
#include"string.h"
struct SPerson
{
 char name[20];    //姓名
 int num;          //的票数 
}stu[20];
int main()
{
    int i,j,n,x[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]++;if(x[i]==n) printf("%s ",stu[i].name);}
     return 0;
}
    

参考下

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

struct SPerson {
    char name[20];  // 姓名
    int num;        // 票数
    int order;      // 达到票数的顺序
} candidates[100];

int main() {
    int n;
    scanf("%d", &n);

    // 初始化每个候选人的票数和顺序为0
    for (int i = 0; i < n; i++) {
        scanf("%s", candidates[i].name);
        candidates[i].num = 0;
        candidates[i].order = 0;
    }

    // 统计每个候选人的得票数和达到票数的顺序
    int order = 1;
    for (int i = 0; i < n; i++) {
        char candidateName[20];
        scanf("%s", candidateName);
        for (int j = 0; j < n; j++) {
            if (strcmp(candidates[j].name, candidateName) == 0) {
                candidates[j].num++;
                if (candidates[j].order == 0) {
                    candidates[j].order = order;
                    order++;
                }
                break;
            }
        }
    }

    // 找到得票最高者(可多人并列),并按照达到票数的顺序排列
    struct SPerson maxCandidate = {"", -1, -1};
    for (int i = 0; i < n; i++) {
        if (candidates[i].num > maxCandidate.num || 
            (candidates[i].num == maxCandidate.num && candidates[i].order < maxCandidate.order)) {
            maxCandidate = candidates[i];
        }
    }
    printf("%s", maxCandidate.name);
    for (int i = 0; i < n; i++) {
        if (candidates[i].num == maxCandidate.num && candidates[i].order != maxCandidate.order) {
            printf(" %s", candidates[i].name);
        }
    }
    printf("\n");

    return 0;
}
#include<stdio.h> 
#include<stdlib.h>
#include<string.h>

struct SPerson
{
   char name[20];    //姓名
   int *num;         //指向票数数组的指针 
}stu[20];

void addVote(char name[], struct SPerson array[], int n)
{
   int i;
   for(i=0;i<n;i++)
   {
      if(strcmp(name,array[i].name)==0)
      {
         array[i].num[i]++;
         break;
      }
   }
}

int main()
{
   int i,j,n;
   scanf("%d",&n);
   for(i=0;i<n;i++) 
   {
      scanf("%s",stu[i].name);
      stu[i].num = (int*)malloc(n * sizeof(int));  //动态分配数组空间 
      for(j=0;j<n;j++)
      {
         stu[i].num[j] = 0;  //初始化票数 
      }
   }
   struct SPerson winners[20];
   int max = 0, count = 0;
   for(i=0;i<n;i++)
   {
      addVote(stu[i].name, stu, n);  //加票 
      for(j=0;j<n;j++)
      {
         if(stu[i].num[j] > max)
         {
            max = stu[i].num[j];
         }
      }
   }
   for(i=0;i<n;i++)
   {
      if(stu[i].num[i] == max)
      {
         strcpy(winners[count].name,stu[i].name);
         winners[count].num = stu[i].num[i];
         count++;
      }
   }
   for(i=0;i<count;i++)
   {
      printf("%s ",winners[i].name);
   }
   for(i=0;i<n;i++)
   {
      free(stu[i].num);  //释放数组空间 
   }
   return 0;
}

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 你可以看下这个问题的回答https://ask.csdn.net/questions/7706903
  • 这篇博客你也可以参考下:【C语言】交换最大、最小值。输入一个正整数n(1<n≤10),再输入n个整数(<=999),将最小值与第一个数交换,最大值与最后一个数交换,然后输出交换后的n个数。
  • 除此之外, 这篇博客: C语言经典100例精选中的 有n个人围成一圈,顺序排号。从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来第几号的那位。 部分也许能够解决你的问题, 你可以仔细阅读以下内容或者直接跳转源博客中阅读:
    #include <stdio.h>
    void main()
    {
        int num[50],n,*p,j,loop,i,m,k;
        printf("请输入这一圈人的数量:\n");
        scanf("%d",&n);
        p=num;
        //开始给这些人编号
        for (j=0;j<n;j++)
        {
            *(p+j)=j+1;
        }
        i=0;//i用于计数,即让指针后移
        m=0;//m记录退出圈子的人数
        k=0;//k报数1,2,3
        while(m<n-1)//当退出的人数不大于总人数时,即留下的人数至少是一个人
            //这句不能写成m<n,因为假设有8人,当退出了6人时,此时还是进行人数退出,即m++,
            //这时是7<8,剩下的一个人自己喊1,2,3那么他也就退出了,将不会有输出
        {
            if (*(p+i)!=0)//如果这个人的头上编号不是0就开始报数加1,这里采用的方法是报数为3的人头上编号重置为0
            {
                k++;
            }
            if (k==3)
            {    k=0;    //报数清零,即下一个人从1开始报数
                *(p+i)=0;//将报数为3的人编号重置为0
                m++;    //退出人数加1
            }
            i++;      //指针后移
            if (i==n)//这句很关键,如果到了队尾,就要使指针重新指向对头
                //并且它只能放在i++后面,因为只有i++了才有可能i==n
            {
                i=0;
            }
            
            
        }
        printf("现在剩下的人是:");
        for (loop=0;loop<n;loop++)
        {
            if (num[loop]!=0)
            {
                printf("%2d号\n",num[loop]);
            }
        }
        
    }

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