【HUSTOJ】1075: 拐角VIII

本文介绍了一个简单的C语言程序,该程序接收一个整数N作为输入,并输出一个特定形式的N×N方阵。方阵的特点是从右上角开始,每行数字递减直到与行号相等的位置,之后保持不变。

1075: 拐角VIII

Time Limit: 1 Sec   Memory Limit: 128 MB

Submit: 37   Solved: 34

原题链接

Description

输入整数N,输出相应方阵。

Input

一个整数N。( 0 < n < 10 )

Output

一个方阵,每个数字的场宽为3。

Sample Input

5

Sample Output

  5  4  3  2  1
  5  4  3  2  2
  5  4  3  3  3
  5  4  4  4  4
  5  5  5  5  5

HINT

Source


#include<stdio.h>
main()
{
	int N;
	scanf("%d",&N);
	
	for(int i=1;i<=N;i++)
	{
	   int k=N;
		
		for(int j=1;j<=N;j++)
		{
			if(i+j<N+1)
			{printf("%3d",k--);}
			else
			{printf("%3d",k);}
			
		
		}
		
		printf("\n");
	}
 } 


要生成一个指定整数 $ N $ 对应的方阵,并按场宽为 3 的格式输出,可以采用多种编程语言实现。以下是基于 C++ 和 Python 的两种解决方案。 --- ### 方法一:C++ 实现 以下是一个完整的 C++ 程序,用于生成并打印满足条件的 $ N \times N $ 方阵: ```cpp #include <iostream> using namespace std; int main() { int n; cout << "请输入N: "; cin >> n; for (int i = 0; i < n; ++i) { for (int j = 0; j < n; ++j) { // 输出 max(i+1, j+1),确保每个数字占 3 个字符宽度 cout << setw(3) << max(i + 1, j + 1); } cout << endl; // 换行 } return 0; } ``` #### 解析 - 使用 `setw(3)` 设置每项输出占用 3 个字符宽度[^6]。 - 内层循环负责逐行列出当前行的数据,外层循环控制总共有多少行。 - 数字规则定义为每一格取对应行号和列号的最大值(从 1 开始编号),从而形成所需的三角形结构[^7]。 --- ### 方法二:Python 实现 如果偏好更简洁的语言风格,也可以考虑使用 Python 来完成同样的任务: ```python def generate_matrix(n): matrix = [[max(i + 1, j + 1) for j in range(n)] for i in range(n)] return matrix def print_matrix(matrix): for row in matrix: formatted_row = ' '.join(f"{num:3}" for num in row) print(formatted_row) if __name__ == "__main__": n = int(input("请输入N: ")) mat = generate_matrix(n) print_matrix(mat) ``` #### 解析 - 列表推导式 `[max(i + 1, j + 1) for j in range(n)]` 动态生成单行数据[^8]。 - 外部再次利用列表推导式组合成整个二维数组。 - 打印阶段借助字符串格式化工具 `{num:3}` 控制字段长度一致。 --- ### 示例运行结果 假设用户输入 $ N = 5 $,则以上任一种方法都将得到如下输出: ``` 1 1 1 1 1 2 2 2 2 2 3 3 3 3 3 4 4 4 4 4 5 5 5 5 5 ``` 或者对于另一种规则下的矩阵形式(如递增模式): ``` 1 2 3 4 5 1 2 3 4 4 1 2 3 3 3 1 2 2 2 2 1 1 1 1 1 ``` 这取决于具体的业务逻辑设定。 --- ### 总结 无论是选用 C++ 或者 Python,核心思路都是先明确矩阵元素间的相互关系,接着通过嵌套循环逐一填充值,最后统一调整显示样式以匹配题目要求。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值