【习题解析】小杨的 H 字矩阵

这篇具有很好参考价值的文章主要介绍了【习题解析】小杨的 H 字矩阵。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

题目来源:2023 年 12 月 CCF GESP C++ 二级 编程题 第二题 小杨的 H 字矩阵

1 题目:

题目描述:
小杨想要构造一个 的 H 字矩阵(N 为奇数),具体来说,这个矩阵共有 N 行,每行 N 个字符,其中最左列、最右列都是 | ,而中间一行(即第 N + 1 2 \frac{N+1}{2} 2N+1行)的第 2~N-1 个字符都是 - ,其余所有字符都是半角小写字母a 。
例如,一个 N=5 的 H 字矩阵如下:

|aaa|
|aaa|
|---|
|aaa|
|aaa|

请你帮小杨根据给定的 N 打印出对应的 H 字矩阵。
输入:
一行一个整数 N ( 5 < = N < = 49 5<=N<=49 5<=N<=49 ,保证 N 为奇数)。
输出:
输出对应的 H 字矩阵。
请严格按格式要求输出,不要擅自添加任何空格、标点、空行等任何符号。
你应该恰好输出 N 行,每行除了换行符外恰好包含 N 个字符,这些字符要么是 - ,要么是 | ,要么是 a 。
你的输出必须和标准答案完全一致才能得分,请在提交前仔细检查。
特别提醒:
在常规程序中,输入、输出时提供提示是好习惯。但在本场考试中,由于系统限定,请不要在输入、输出中附带任何提示信息。
样例输入 1:
5
样例输出 1:

|aaa|
|aaa|
|---|
|aaa|
|aaa|

样例输入 2:
7
样例输出 2:

|aaaaa|
|aaaaa|
|aaaaa|
|-----|
|aaaaa|
|aaaaa|
|aaaaa|

2 题目分析

第一步,完成输入部分。
输入部分只有一个整数 N,范围在 5 < = N < = 49 5<=N<=49 5<=N<=49 ,并且保证 N 为奇数。

int N;
cin>>N;

根据输出可知,分成三个部分。
第一部分,输出 |aaaaa|,有 N/2 行 ,第二部分输出 |-----| 只有 1 行,第三部分输出 |aaaaa|,有 N/2 行。
先实现第一部分,| 是固定的,而内部的 a,刚好是 N-2 个。
所以,代码可以这样:

for(int i=1;i<=N/2;i++)//共有 N/2 行
{
	cout<<"|";//换行之前,先把|a...|这些先输出
	for(int j=1;j<=N-2;j++)//内部的a,刚好是 N-2个
	{
		cout<<"a";
	}
	cout<<"|";
	cout<<endl;//换行
}

可以按样例验证一下,发现是正确的。
![[Pasted image 20231220105650.png]]
接着输出包含 - 部分。这个部分只需要注意 - 的个数即可,发现和第一部分的 a 是一样的,所以代码可以这样写:

cout<<"|";
for(int j=1;j<=N-2;j++)
{
	cout<<"-";
}
cout<<"|";
cout<<endl;

第三部分和第一部分一样,直接复制代码即可。
以上,即完成整个输出。
代入验证,发现正确!
![[Pasted image 20231220110205.png]]
这个方法相对来说,比较简单,也方便理解,但代码量相对比较大,当然还有更加简便的方法,如果没兴趣的可以不用看下去啦~
分析发现,一共有 N 行,并且 N 行都是进行换行。

for(int i=1;i<=N;i++)
{
	cout<<endl;//换行
}

而在换行之前,需要将 |、a、-、| 这些字符输出。
因此先输出 |:

//换行之前,还需要进行各种操作
cout<<"|";//|是必须的

紧接着输出字符 a 或者字符 -,只有一个特殊情况,当处于中间一行时,才会输出 a字符,所以只需要进行一个特殊判断即可。

	//根据行输出a和-
	if(i==(N+1)/2)//在中间一行时
	{
		for(int j=1;j<=N-2;j++)
		{
			cout<<"-";//输出字符-
		}
	}
	else
	{
		for(int j=1;j<=N-2;j++)
		{
			cout<<"a";//输出字符-
		}
	}

最后把 | 带上,结合前面部分。文章来源地址https://www.toymoban.com/news/detail-761747.html

for(int i=1;i<=N;i++)
{
	//换行之前,还需要进行各种操作
	cout<<"|";//|是必须的
	//根据行输出a和-
	if(i==(N+1)/2)//在中间一行时
	{
		for(int j=1;j<=N-2;j++)
		{
			cout<<"-";//输出字符-
		}
	}
	else
	{
		for(int j=1;j<=N-2;j++)
		{
			cout<<"a";//输出字符-
		}
	}
	cout<<"|";
	cout<<endl;//换行
}

3 参考代码

3.1 方法一:

#include<iostream>
using namespace std;
int main()
{
	int N;
	cin>>N; 
	//第一部分 
	for(int i=1;i<=N/2;i++)//共有 N/2 行
	{
		cout<<"|";//换行之前,先把|a...|这些先输出
		for(int j=1;j<=N-2;j++)//内部的a,刚好是 N-2个
		{
			cout<<"a";
		}
		cout<<"|";
		cout<<endl;//换行
	}
	//第二部分 
	cout<<"|";
	for(int j=1;j<=N-2;j++)
	{
		cout<<"-";
	}
	cout<<"|";
	cout<<endl;
	//第三部分 
	for(int i=1;i<=N/2;i++)//共有 N/2 行
	{
		cout<<"|";//换行之前,先把|a...|这些先输出
		for(int j=1;j<=N-2;j++)//内部的a,刚好是 N-2个
		{
			cout<<"a";
		}
		cout<<"|";
		cout<<endl;//换行
	}
	return 0; 
}

3.2 方法二:

#include<iostream>
using namespace std;
int main()
{
	int N;
	cin>>N;
	for(int i=1;i<=N;i++)
	{
		//换行之前,还需要进行各种操作
		cout<<"|";//|是必须的
		//根据行输出a和-
		if(i==(N+1)/2)//在中间一行时
		{
			for(int j=1;j<=N-2;j++)
			{
				cout<<"-";//输出字符-
			}
		}
		else
		{
			for(int j=1;j<=N-2;j++)
			{
				cout<<"a";//输出字符-
			}
		}
		cout<<"|";
		cout<<endl;//换行
	}
}

到了这里,关于【习题解析】小杨的 H 字矩阵的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 线性代数本质系列(一)向量,线性组合,线性相关,矩阵

    本系列文章将从下面不同角度解析线性代数的本质,本文是本系列第一篇 向量究竟是什么? 向量的线性组合,基与线性相关 矩阵与线性相关 矩阵乘法与线性变换 三维空间中的线性变换 行列式 逆矩阵,列空间,秩与零空间 克莱姆法则 非方阵 点积与对偶性 叉积 以线性变换

    2024年02月04日
    浏览(50)
  • 0203逆矩阵-矩阵及其运算-线性代数

    定义7 对于 n n n 阶矩阵A,如果有一个 n n n 阶矩阵B,使 A B = B A = E AB=BA=E A B = B A = E 则说矩阵A是可逆的,并把矩阵B称为A的逆矩阵,简称逆阵。 定理1 若矩阵A可逆,则 ∣ A ∣ ≠ 0 vert Avert not = 0 ∣ A ∣  = 0 证明: A 可逆,即有 A − 1 ,使得 A A − 1 = E ∣ A A − 1 ∣ = ∣ A

    2024年04月13日
    浏览(56)
  • 高等代数(七)-线性变换03:线性变换的矩阵

    § 3 § 3 §3 线性变换的矩阵 设 V V V 是数域 P P P 上 n n n 维线性空间, ε 1 , ε 2 , ⋯   , ε n varepsilon_{1}, varepsilon_{2}, cdots, varepsilon_{n} ε 1 ​ , ε 2 ​ , ⋯ , ε n ​ 是 V V V 的一组基, 现在我们来建立线性变换与矩阵的关系. 空间 V V V 中任一向量 ξ xi ξ 可以经 ε 1 , ε 2 , ⋯  

    2024年02月20日
    浏览(51)
  • 线性代数|证明:线性变换在两个基下的矩阵相似

    前置定义 1(基变换公式、过渡矩阵) 设 α 1 , ⋯   , α n boldsymbol{alpha}_1,cdots,boldsymbol{alpha}_n α 1 ​ , ⋯ , α n ​ 及 β 1 , ⋯   , β n boldsymbol{beta}_1,cdots,boldsymbol{beta}_n β 1 ​ , ⋯ , β n ​ 是线性空间 V n V_n V n ​ 中的两个基, { β 1 = p 11 α 1 + p 21 α 2 + ⋯ + p n 1 α n β 2

    2024年02月03日
    浏览(50)
  • 【理解线性代数】(四)线性运算的推广与矩阵基础

    工业生产的发展趋势总是从单件生产到批量生产。科学技术研究也是一样,总是从简单计算到复合运算、批量运算。批量意味着生产能力、处理能力的提升。计算机从16位发展到64位,从单核发展到多核;计算机从CPU处理数据发展到GPU处理数据;大数据、人工智能领域的大模型

    2024年02月09日
    浏览(50)
  • 线性代数(4):伴随矩阵、逆矩阵和矩阵的秩

             A 为一个n阶矩阵,行列式 | A | 的每个元素a ij 的代数余子式Aij组成的矩阵叫做伴随矩阵,记作 A* ;         a.  如果 A 矩阵可逆,A* = | A | A^-1         b.  | A | = | A |^(n-1)         c.  ( kA )* = k^(n-1) A*         a.  若矩阵的行列式结果值不等于 0 ,那么这个矩阵就是

    2024年02月08日
    浏览(60)
  • 【线性代数与矩阵论】Jordan型矩阵

    2023年11月3日 #algebra 在对向量做线性变换时,向量空间的某个向量的方向不发生改变,而只是在其方向上进行拉伸,则该向量是线性变换的特征向量,其在变换中被拉伸的倍数为该特征向量的特征值(特征根)。 矩阵的相同特征值有其对应的代数重数与几何重数,相同特征值

    2024年02月04日
    浏览(47)
  • 线性代数笔记11--矩阵空间、秩1矩阵

    1. 矩阵空间 所有的 3 × 3 3 times 3 3 × 3 矩阵构成的空间 M M M 。 考虑空间 M M M 的子空间 上三角矩阵 对称矩阵 对角矩阵 3 x 3 3x3 3 x 3 矩阵空间的基: [ 1 0 0 0 0 0 0 0 0 ] [ 0 1 0 0 0 0 0 0 0 ] [ 0 0 1 0 0 0 0 0 0 ] [ 0 0 0 1 0 0 0 0 0 ] [ 0 0 0 0 1 0 0 0 0 ] [ 0 0 0 0 0 1 0 0 0 ] [ 0 0 0 0 0 0 1 0 0 ] [ 0 0 0 0 0 0

    2024年03月10日
    浏览(47)
  • 0202矩阵的运算-矩阵及其运算-线性代数

    定义2 设有两个 m × n mtimes n m × n 橘子 A = ( a i j ) 和 B = ( b i j ) A=(a_{ij})和B=(b_{ij}) A = ( a ij ​ ) 和 B = ( b ij ​ ) ,那么矩阵A与B的和记为A+B,规定为 A + B = ( a 11 + b 11 a 12 + b 12 ⋯ a 1 n + b 1 n a 21 + b 21 a 22 + b 22 ⋯ a 2 n + b 2 n ⋮ ⋮ ⋮ a m 1 + b m 1 a m 2 + b m 2 ⋯ a m n + b m n ) A+B=begin{pmatr

    2024年04月25日
    浏览(47)
  • 0205矩阵分块法-矩阵及其运算-线性代数

    1 分块矩阵的定义 将矩阵A用若干条纵线和横线分成许多个小矩阵,每一个小矩阵称为A的子快,以子块为元素的形式上的矩阵称为分块矩阵。 2 分块矩阵的运算(性质) 设矩阵A与B的行数相同,列数相同,采用相同的分块法,有 A = ( A 11 ⋯ A 1 r ⋮ ⋮ A s 1 ⋯ A s r ) , B = ( B 11 ⋯

    2024年04月26日
    浏览(37)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包