我在vs中测试是没问题的,提交出现runtime error,跪求大佬帮忙看看哇
查看原帖
我在vs中测试是没问题的,提交出现runtime error,跪求大佬帮忙看看哇
872482
B_Nullrt楼主2022/11/18 17:32
#include <stdio.h>
#include <malloc.h>
#include <string.h>
typedef struct {
	float num;
	char teem;
}Tee;

int main() {
	int n, k; scanf("%d%d", &n, &k);
	Tee* nums = (Tee*)malloc(sizeof(Tee) * n);
	for (int i = 0; i < n; i++) {
		scanf("%f", &nums[i].num);
		//getchar();
		nums[i].num *= 0.6;//直接存入乘以百分之六十的理论成绩
		scanf("%c", &nums[i].teem);//输入对应的队伍信息	
	}

	int reciveNum[k][k];//里面参数存k和k,存收到的分数
	float average[k]; memset(average, 0, sizeof(average));
	for (int i = 0; i < k; i++) {
		for (int j = 0; j < k; j++) {
			scanf("%d", &reciveNum[i][j]);
		}		
	}
	for (int i = 0; i < k; i++) {
		int sum = 0;
		for (int j = 0; j < k; j++) {
			sum += reciveNum[j][i];//将每一列的分数加起来
		}
		average[i] = sum / k;
		//printf("第%d组的平均分为%.1f\n", i + 1, average[i]);
	}
	
	//对小组成绩进行评定
	int tmpNum = 0; //tmp用来遍历个人成绩
	for (int i = 0; i < k; i++) {
		int newSum = 0;
		int newNum = 0;//表明需要修改平均值
		for (int j = 0; j < k; j++) {			
			if (reciveNum[j][i]>=average[i] - 15 && reciveNum[j][i]<=average[i] + 15) {
				//如果平均分差别不超过15
				newSum += reciveNum[j][i];
				newNum++;
			}
		}
		//里面for循环结束后,就要重新计算最后的平均值		
		if (newNum != k) {
			//说明需要对average[i]进行更改
			average[i] = (float)(newSum / newNum) * 0.4;
		}
		else {
			average[i] *= 0.4;
		}
		//最后统计最终成绩,然后进行排序
		while (nums[tmpNum].teem == nums[tmpNum + 1].teem) {
			nums[tmpNum].num += average[i];//得到该人的最终成绩
			//printf("得到最终成绩%.1f--->%c\n", nums[j].num, nums[j].teem);
			tmpNum++;
		}
		nums[tmpNum].num += average[i];
		//printf("得到最终成绩%.1f--->%c\n", nums[j].num, nums[j].teem);
		tmpNum++;
		//printf("经过修改后第%d组的平均成绩为%.1f\n", i + 1, average[i]);
	}

	//采用逆向冒泡排序对整个数组进行排序(将值大的放在头部)
	//printf("经过逆向冒泡排序,得到的顺序如下:\n");
	int a = 0;
	Tee tmp;//用来做交换的中间变量
	for (int i = 0; i < n - 1; i++) {
		//最多要进行n-1趟冒泡排序
		for (int j = n - 1; j > i; j--) {
			if (nums[j].num > nums[j-1].num) {
				//将大的值前移
				tmp = nums[j - 1];
				nums[j - 1] = nums[j];
				nums[j] = tmp;				
			}
		}
		a = (int)(nums[i].num + 0.5);
		printf("%d--->%c\n", a, nums[i].teem);
		a++;
	}
	a = (int)(nums[n-1].num + 0.5);
	printf("%d--->%c\n", a, nums[n-1].teem);
	return 0;
}

2022/11/18 17:32
加载中...