混沌,何处巡 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 抖音咸鱼付款链接转码支付宝
  • ¥15 ubuntu22.04上安装ursim-3.15.8.106339遇到的问题
  • ¥15 求螺旋焊缝的图像处理
  • ¥15 blast算法(相关搜索:数据库)
  • ¥15 请问有人会紧聚焦相关的matlab知识嘛?
  • ¥15 网络通信安全解决方案
  • ¥50 yalmip+Gurobi
  • ¥20 win10修改放大文本以及缩放与布局后蓝屏无法正常进入桌面
  • ¥15 itunes恢复数据最后一步发生错误
  • ¥15 关于#windows#的问题:2024年5月15日的win11更新后资源管理器没有地址栏了顶部的地址栏和文件搜索都消失了