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);
}
题目是报质数的得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);
}
如有帮助,请点击我的回答下方的【采纳该答案】按钮帮忙采纳下,谢谢!
中间的for循环排序没用啊,而且题目要求的是报质数的得2分,质数是除了1和自身之外不能被其它数整除的数,你求质数的代码也不对。
你题目的具体要求是什么?每轮到最后一个人了继续从头开始报数吗?
排序的地方感觉没什么用,是要根据学号进行排序吗?代码修改如下:
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#define N 100
//判断质数
int prime(int n)
{
int i = 2;
if (n < 2) return 0;
for (i = 2; i < n - 1; i++)
{
if (n % i == 0)
return 0;
}
return 1;
}
struct student {
int number;
int score;
};
void main()
{
struct student stu[N],tmp;
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++)
{
for (j = 0; j < m - 1 - i; j++)
{
if (stu[j].number > stu[j + 1].number)
{
tmp = stu[j];
stu[j] = stu[j + 1];
stu[j + 1] = tmp;
}
}
}
t = 2;//从2开始报数
for (i = 1; i <= n; i++) //n轮
{
for (j = 0; j < m; j++)
{
if (prime(j + t))
stu[j].score += 2; //报质数的得2分
else
stu[j].score += 1; //其它得1分
t++; //继续报数
}
}
//输出学号和对应的得分
for (i = 0; i < m; i++)
printf("%d %d\n", stu[i].number, stu[i].score);
}
你可以参考下这篇文章:C语言#贪吃蛇#自动寻路