读入 1 个正整数 n(3≤n<9)和 1 个整数 digit(2<=digit<=9), 请输出一个 n 阶的方阵, 该矩阵所有边上的元素都是 digit, 其它元素都是 digit-1.
时间: 2023-05-31 18:21:03 浏览: 509
输入一个数字n,输出一个n层的特定三角形
5星 · 资源好评率100%
### 回答1:
可以使用两层循环来生成矩阵,外层循环控制行数,内层循环控制列数。对于边上的元素,判断当前行或列是否为第一行、最后一行、第一列或最后一列,如果是则赋值为 digit,否则赋值为 digit-1。对于其它元素,直接赋值为 digit-1。
具体实现代码如下:
n, digit = map(int, input().split())
# 生成 n 阶方阵
matrix = [[digit-1] * n for i in range(n)]
# 处理边上的元素
for i in range(n):
for j in range(n):
if i == or i == n-1 or j == or j == n-1:
matrix[i][j] = digit
# 输出矩阵
for i in range(n):
for j in range(n):
print(matrix[i][j], end=' ')
print()
### 回答2:
本题要求输出一个n阶方阵,满足所有边上的元素都是digit,其余元素都是digit-1。我们可以先考虑如何构造一个n=3的矩阵。令a=digit,b=digit-1,则该矩阵如下所示:
a a a
a b a
a a a
可以看出,该矩阵满足条件。对于n>3的情况,我们只需将该矩阵的边框缩小一层,然后在里面嵌套一个n-2阶的矩阵即可。以下是n=5和n=7的例子:
n=5时:
a a a a a
a b b b a
a b a b a
a b b b a
a a a a a
n=7时:
a a a a a a a
a b b b b b a
a b a a a b a
a b a b a b a
a b a a a b a
a b b b b b a
a a a a a a a
可以发现,只要按照上述规律构造即可得到所需矩阵。以下是完整代码实现:
#include <stdio.h>
int main()
{
int n, digit;
scanf("%d%d", &n, &digit);
int a = digit, b = digit - 1; // 定义a和b
int matrix[10][10]; // 定义要输出的矩阵
// 构造矩阵
for(int i = 0; i < n; i++)
{
for(int j = 0; j < n; j++)
{
if(i == 0 || i == n - 1 || j == 0 || j == n - 1) // 在边框上
matrix[i][j] = a;
else if(i == (n - 1) / 2 && j == (n - 1) / 2) // 在中心位置
matrix[i][j] = b;
else
{
int m = (n - 1) / 2; // 计算嵌套的矩阵阶数
int x = i < m ? i : n - 1 - i; // 计算嵌套的矩阵行号
int y = j < m ? j : n - 1 - j; // 计算嵌套的矩阵列号
matrix[i][j] = digit - matrix[x][y]; // 输出digit减去嵌套的矩阵元素的值
}
}
}
// 输出矩阵
for(int i = 0; i < n; i++)
{
for(int j = 0; j < n; j++)
{
printf("%d ", matrix[i][j]);
}
printf("\n");
}
return 0;
}
### 回答3:
这道题目可以使用二重循环来实现,外层循环控制行数,内层循环控制列数。首先将所有元素赋值为 digit-1,然后对边上的元素进行覆盖。我们可以将第一行和最后一行以及第一列和最后一列的元素覆盖,即让它们等于 digit。这里需要注意的是,当 n=3 时,只需覆盖第一行、最后一行和第一列、最后一列即可。代码如下:
```
#include <stdio.h>
int main()
{
int n, digit;
scanf("%d%d", &n, &digit); // 输入 n 和 digit 的值
int i, j;
for (i = 0; i < n; i++) {
for (j = 0; j < n; j++) {
// 先赋值为 digit-1
int num = digit - 1;
// 对边上的元素进行覆盖
if (i == 0 || i == n - 1 || j == 0 || j == n - 1) {
num = digit;
}
printf("%d ", num); // 输出该元素的值
}
printf("\n"); // 输出换行符
}
return 0;
}
```
输出结果如下:
```
2 2 2
2 1 2
2 2 2
```
阅读全文