混沌,何处巡 2022-06-12 20:55 采纳率: 100%
浏览 52
已结题

关于#C语言#的问题,如何解决?

n轮,m人,第一个人报2其他人继续,报质数的得2分,其他的得1分

#include<stdio.h>
#define N 100
struct student{
long int number;
int score;
};
void main()
{ struct student stu[N];
int i,m,j,t,n;
int exchange=0;
printf("人数:");
scanf("%d",&m);
printf("轮数:");
scanf("%d",&n);
for(i=0;i<m;i++)
{
printf("学号:");
scanf("%ld",&stu[i].number);
stu[i].score=0;

}
for(i=0;i<m-1;i++)
{
exchange=0;
for(j=0;j<m-1-i;j++)
{
if(stu[i].number>stu[i+1].number)
{
t=stu[i].number;
stu[i].number=stu[i+1].number;
stu[i+1].number=t;
exchange=1;
}
}
if(!exchange)
break;
}
for(i=0;i<m;i++)
{
printf("%ld",stu[i].number);
printf("\n");
}
for(i=0;i<n;i++)
{
for(j=0;j<m;j++)
{
if((j+2)%2==0)
stu[j].score++;
else
stu[j].score+=2;
}
}
for(i=0;i<m;i++)
printf("%d\n",stu[i].score);

}

  • 写回答

3条回答 默认 最新

  • 天际的海浪 2022-06-12 21:37
    关注

    题目是报质数的得2分,质数是除了1和自身之外不能被其它数整除的数,你需要写一个函数isprime()判断是不是质数,报数计数需要一个num变量初始为2, 每次循环+1, 不能用j+2否则下一轮又从2开始了
    排序要用内循环变量j, 不是i

    你题目的解答代码如下:

    #include <stdio.h>
    #define N 100
    struct student
    {
        long int number;
        int score;
    };
    
    int isprime(int n)
    {
        int i;
        if(n<2) return 0;
        for(i=2;i<n;i++)
            if(n%i==0) return 0;
        return 1;
    }
    
    void main()
    {
        struct student stu[N];
        int i, m, j, t, n,num=2;
        int exchange = 0;
        printf("人数:");
        scanf("%d", &m);
        printf("轮数:");
        scanf("%d", &n);
        for (i = 0; i < m; i++)
        {
            printf("学号:");
            scanf("%ld", &stu[i].number);
            stu[i].score = 0;
        }
        for (i = 0; i < m - 1; i++)
        {
            exchange = 0;
            for (j = 0; j < m - 1 - i; j++)
            {
                // 排序要用内循环变量j, 不是i
                if (stu[j].number > stu[j + 1].number)
                {
                    t = stu[j].number;
                    stu[j].number = stu[j + 1].number;
                    stu[j + 1].number = t;
                    exchange = 1;
                }
            }
            if (!exchange)
                break;
        }
        for (i = 0; i < n; i++)
        {
            for (j = 0; j < m; j++)
            {
                if (isprime(num))
                    stu[j].score += 2;
                else
                    stu[j].score++;
                num++;
            }
        }
        for (i = 0; i < m; i++)
            printf("学号:%d  得分:%d\n", stu[i].number, stu[i].score);
    }
    

    如有帮助,请点击我的回答下方的【采纳该答案】按钮帮忙采纳下,谢谢!

    img

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 6月21日
  • 已采纳回答 6月13日
  • 赞助了问题酬金5元 6月12日
  • 创建了问题 6月12日

悬赏问题

  • ¥15 win2012磁盘空间不足,c盘正常,d盘无法写入
  • ¥15 用土力学知识进行土坡稳定性分析与挡土墙设计
  • ¥70 PlayWright在Java上连接CDP关联本地Chrome启动失败,貌似是Windows端口转发问题
  • ¥15 帮我写一个c++工程
  • ¥30 Eclipse官网打不开,官网首页进不去,显示无法访问此页面,求解决方法
  • ¥15 关于smbclient 库的使用
  • ¥15 微信小程序协议怎么写
  • ¥15 c语言怎么用printf(“\b \b”)与getch()实现黑框里写入与删除?
  • ¥20 怎么用dlib库的算法识别小麦病虫害
  • ¥15 华为ensp模拟器中S5700交换机在配置过程中老是反复重启