求平均成绩 矩阵数据处理 【循环处理 二维数组】

🚗🚗🚗🚗🚗🚗🚗 数据结构专栏🚗🚗🚗🚗🚗🚗🚗🚗🚗🚗

🛹🛹🛹🛹🛹🛹🛹小知识总结分享🛹🛹🛹🛹🛹🛹🛹🛹🛹🛹

🚀🚀🚀🚀🚀🚀🚀题目历练场🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀

🚢🚢🚢🚢🚢🚢🚢功能包与集合类介绍🚢🚢🚢🚢🚢🚢🚢🚢🚢

🛞🛞🛞🛞🛞🛞🛞java EE🛞🛞🛞🛞🛞🛞🛞🛞🛞🛞🛞🛞🛞

😘😘😘😘😘😘😘Agent大模型😘😘😘😘😘😘😘😘😘😘😘😘

今天和大家一起分享一道基础的算法题目

  • 题目来源 : HDOJ

题目

  • 这个题目本省不复杂 但是对于新手朋友存在很多坑点 我认为对于二维数组和循环逻辑的理解有一个较为深入的考察。
cpp 复制代码
#include <iostream>
using namespace std;

/*
2 3
10 20 30 
56 4  30


30.00 45.00
33.00 12.00 30.00

0

*/

//复习
int main() {
	int n, m;
	int arr[51][6];
	double sa[51];
	double ca[6];
	int count ;
	while (cin >> n >> m) {  //反复输入
		//存进数据 
		for (int i = 0; i < n; ++i)
		{
			for (int j = 0; j <m; ++j)
			{
				cin >> arr[i][j];
			}
		}

		
		// 每一位同学的平均成绩 n 固定 加和m
		for (int i = 0; i < n; ++i)
		{
			sa[i] = 0; // 初始化每一位同学平均成绩
			for (int j = 0; j < m; ++j)
			{
				sa[i] += arr[i][j];
			}
			sa[i] /= m;  //每一位学生的平均成绩计算完成
		}

		// 每一个学科的平均成绩 m 固定 加和n
		for (int i = 0; i < m; ++i)
		{
			ca[i] = 0; // 初始化每一学科的平均成绩
			for (int j = 0; j < n; ++j)
			{
				ca[i] += arr[j][i];    // 注意是i 表示列 变化是行的数据
			}
			ca[i] /= n;  //每一位学生的平均成绩计算完成
		}

		//遍历数组 进行判断符合条件的数据
		count = 0;
		for (int i = 0; i < n; ++i)
		{	
			int sum = 0;
			for (int j = 0; j < m; ++j)
			{
				sum += ( arr[i][j] >= ca[j]);  //某位同学的第j门成绩是不是大于等于第i门课程的平均成绩
			}
			//此时一个同学的数据已经便利完成;
			if (sum == m) count++;
		}

		// 遍历打印 每一个同学的平均成绩
		for (int i = 0; i < n; ++i)
		{
			//神之一手 处理空格
			if (i != 0) {
				cout << ' ';
			}
			printf("%.2f" , sa[i]);
		}
		cout << endl;
	
		// 遍历打印 每一个学科的平均成绩
		for (int i = 0; i < m; ++i)
		{
			//神之一手 处理空格
			if (i != 0) {
				cout << ' ';
			}
			printf("%.2f", ca[i]);
		}
		cout << endl;

		cout << count << endl;

	}
	return 0;
}

题目总结

这道 HDOJ 2023 题目虽然基础,但考察了多个关键知识点,值得新手朋友认真复盘:

  • 二维数组的存储与遍历:使用 arr[51][6] 存储 n 位同学、m 门课程的成绩,需要理解行(同学)与列(课程)的对应关系。

  • 双重循环的嵌套逻辑:计算每位同学的平均成绩时,外层循环是同学、内层循环是课程;计算每门课程的平均成绩时,外层循环是课程、内层循环是同学,行列互换是本题最大的坑点。

  • 条件统计:判断每位同学是否所有科目都达到该科目的平均分,需要逐门比较并累加计数。

    • 这道题虽然代码不长,但完整覆盖了二维数组、循环嵌套、格式化输出等基础能力。建议新手朋友:
  1. 先手写一遍行列遍历的过程,理清下标含义;
  2. 再独立实现一遍,重点检查学科平均分的计算;
  3. 最后对照标准输出验证格式是否正确。

掌握这道题,对后续更复杂的矩阵类题目会很有帮助。

  • 我是Dylan
    • 无限进步
相关推荐
All for pursuit.1 小时前
【回溯-2】22.括号生成
数据结构·c++·算法·leetcode
longlongzihan2 小时前
LeetCode 1004.最大连续1的个数III 滑动窗口及动态规划题解
c++·算法·leetcode·dp·滑动窗口
朝朝辞暮i2 小时前
C++ 第 22 课:const —— 不允许随便修改的数据
开发语言·c++·算法
蒸蒸yyyyzwd2 小时前
力扣二分总结-lowerbound
c++
ShineWinsu2 小时前
对于Redis:List类型的解析
数据库·c++·redis·链表·缓存·面试·list
小师兄吃牛肉3 小时前
C++ 与 Lua 的协程交互:从原理到实战
c++·lua·交互
YYYing.4 小时前
【设计模式系列 (八) 】组合模式
c++·后端·设计模式·组合模式·c/c++
艾莉丝努力练剑4 小时前
【QT】系统相关:多线程QThread基础
开发语言·网络·c++·qt·学习·大模型