编写一个投票程序,每张选票只能填写一个人的名字,输入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;
}
不知道你这个问题是否已经解决, 如果还没有解决的话:1.首先使用一位数组将身高数据进行储存
2.使用选择排序法对身高从小到大进行排序,注意是从小到大,因为题目要求如果身高差值相同,则取身高较高的两人
3.找出身高的最小差值,如果并记录下这两个礼仪的身高,如果在
循环中出现了更小的身高差值,则将礼仪的身高进行替换