铜锣烧学电子 2022-04-24 10:42 采纳率: 78.6%
浏览 84
已结题

帮我看看,顺便帮我改一下

问题遇到的现象和发生背景

编程统计候选人的得票数。有若干位候选人(n<=10),候选人姓名从键盘输入(姓名最长为9个字节),若干位选民,选民每次输入一个得票的候选人的名字(姓名最长为9个字节),若选民输错候选人姓名,则按废票处理。程序自动统计各候选人的得票结果,并按照得票数由高到低的顺序排序。最后输出各选票人得票结果和废票信息。

输入格式:
先输入候选人人数n和n名候选人姓名,再输入选民人数m和m位选民的选票。

输出格式:
先根据选票结果由高到低输出各候选人得票结果,再根据废票情况输出废票信息(换行
后,输出提示信息“invalid vote:”,再输出废票信息);若没有废票,输出提示信息“all are valid!”。
输入样例1:
在这里给出一组输入。例如:

3
zhang
li
wang
9
wang
zhang
zhuang
li
liao
zhang
wang
wang
wang
输出样例1:
在这里给出相应的输出。例如:

wang:4
zhang:2
li:1
invalid vote:
zhuang
liao

问题相关代码,请勿粘贴截图

#include <stdio.h>
#include<string.h>
struct awp {
int c;//票数
char name[10];//候选人
};
struct awp stud[10];
int main()
{
struct awp temp;//投票的签
struct awp cat[9];//用于放入空票签
int n,m,max,num;
int i,flog=0,j,l=0;
scanf("%d",&n);
for(i=0;i<n;i++)
scanf("%s",stud[i].name);//输入候选人
scanf("%d",&m);
for(j=0;j<m;j++)
{
scanf("%s",temp.name);//输入票数
for(i=0;i<n;i++)
{
if(strcmp(temp.name,stud[i].name)==0)//如果投票的签等于投票人,投票数+1;
{
stud[i].c++;
}
else //如果投票签没有这个人,把他放入空票签
{
flog=1;
strcpy(cat[l].name,temp.name);
l++;
}

    }
}
for(i=0;i<n-1;i++)//对票数排序 
{
    for(j=0;j<n-1-i;j++)
    {
        if(stud[j].c<stud[j+1].c)
        {
            temp=stud[j];
            stud[j]=stud[j+1];
            stud[j+1]=temp;
        }
    }
}
for(i=0;i<n;i++)//输出票数和候选人 
{
    printf("%s:%d\n",stud[i].name,stud[i].c);
}
if(flog==1)//如果有空票,输入空票的姓名
{
    printf("invalid vote:\n");
    for(i=0;i<l;i++)
    {
        printf("%s\n",cat[i].name);
    }
}
else if(flog==0)//如果没有空票
printf("all are valid!");
return 0;

}

运行结果及报错内容
我的解答思路和尝试过的方法
我想要达到的结果

帮我原代码上改一下,指出我的问题。

  • 写回答

1条回答 默认 最新

  • qzjhjxj 2022-04-24 15:00
    关注

    修改处见注释,供参考:

    #include <stdio.h>
    #include <string.h>
    struct awp {
        int c;//票数
        char name[10];//候选人
    };
    struct awp stud[10];
    int main()
    {
        struct awp temp;//投票的签
        struct awp cat[9];//用于放入空票签
        int n, m, max, num;
        int i, flog = 0, j, k = 0;
        scanf("%d", &n);
        for (i = 0; i < n; i++){
            scanf("%s", stud[i].name);//输入候选人
            stud[i].c = 0;            // 修改
        }
        scanf("%d", &m);
        for (j = 0; j < m; j++)
        {
            scanf("%s", temp.name);//输入票数
            for (i = 0; i < n; i++)
            {
                if (strcmp(temp.name, stud[i].name) == 0)//如果投票的签等于投票人,投票数+1;
                {
                    stud[i].c++;
                    break;
                }
            }              //修改
            if (i >= n)    //else //如果投票签没有这个人,把他放入空票签    修改
            {
                flog = 1;
                strcpy(cat[k].name, temp.name); 
                k++;                            
            }
        }
        for (i = 0; i < n - 1; i++)//对票数排序  
        {
            for (j = 0; j < n - 1 - i; j++)
            {
                if (stud[j].c < stud[j + 1].c)
                {
                    temp = stud[j];
                    stud[j] = stud[j + 1];
                    stud[j + 1] = temp;
                }
            }
        }
        for (i = 0; i < n; i++)//输出票数和候选人 
        {
            printf("%s:%d\n", stud[i].name, stud[i].c);
        }
        if (flog == 1)//如果有空票,输入空票的姓名
        {
            printf("invalid vote:\n");
            for (i = 0; i < k; i++)
            {
                printf("%s\n", cat[i].name);
            }
        }
        else if (flog == 0)//如果没有空票
            printf("all are valid!");
        return 0;
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 5月2日
  • 已采纳回答 4月24日
  • 创建了问题 4月24日

悬赏问题

  • ¥15 Vue3 大型图片数据拖动排序
  • ¥15 划分vlan后不通了
  • ¥15 GDI处理通道视频时总是带有白色锯齿
  • ¥20 用雷电模拟器安装百达屋apk一直闪退
  • ¥15 算能科技20240506咨询(拒绝大模型回答)
  • ¥15 自适应 AR 模型 参数估计Matlab程序
  • ¥100 角动量包络面如何用MATLAB绘制
  • ¥15 merge函数占用内存过大
  • ¥15 使用EMD去噪处理RML2016数据集时候的原理
  • ¥15 神经网络预测均方误差很小 但是图像上看着差别太大