.编写一个投票程序,每张选票只能填写一个人的名字,输入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<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;
}
不知道你这个问题是否已经解决, 如果还没有解决的话: