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

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

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

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

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

🛞🛞🛞🛞🛞🛞🛞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
    • 无限进步
相关推荐
syagain_zsx3 小时前
BRpc 二次封装:Channel 管理、服务管理与回调工厂
c++·学习·程序人生·rpc·谷歌
fpcc3 小时前
计算机原理—如何高效的操作文件
c++·计算机原理
Rabitebla4 小时前
【系统性学习笔记】Linux 权限篇(二):文件属性、权限修改与目录权限的底层逻辑
linux·c++·笔记·学习·算法
system_error_x4 小时前
C++ 编程基础入门教程
开发语言·c++
reikocao5 小时前
IMU预积分误差模型推导:协方差传播、残差构建、雅可比矩阵
人工智能·线性代数·矩阵
布莱克6056 小时前
A* 算法详解:从原理到实现
开发语言·c++·算法
多弗朗皮卡丘6 小时前
C++ 智能指针
开发语言·c++·c++11·智能指针
进化中的刀盾兽6 小时前
从零实现 C++ AI 大模型接入 SDK(十):SessionManager 会话管理与多轮对话实现
c++
小成202303202656 小时前
C++~02运算符重载
开发语言·c++
郑同学的笔记7 小时前
【c++随笔30】C++ 注册回调函数
开发语言·c++