PS:如果你觉得这道题很简单就可以不看题解自己写。
题目描述
输入一个 n,请找规律,输出如下 n 行 n 列的方阵。
例如,当 n=5 时,输出:
1 | 1 | 1 | 1 | 1 |
1 | 2 | 2 | 2 | 2 |
1 | 2 | 3 | 3 | 3 |
1 | 2 | 3 | 4 | 4 |
1 | 2 | 3 | 4 | 5 |
输入格式
一行,输入一个正整数 n。
输出格式
输出方阵。
输入输出样例
输入 #1
5
输出 #1
1 1 1 1 1
1 2 2 2 2
1 2 3 3 3
1 2 3 4 4
1 2 3 4 5
说明/提示
数据保证,3 ≤ n ≤ 100。
准备:
(作为一个蒟蒻,这道题我研究了半个小时,分享一下(>人<;))
首先,定义一个变量 n ,输入 n:
int n;
cin>>n;
接下来,该写一个双重循环啦!
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
//判断&&输出的代码
}
}
(全是废话
分析:
第一种情况:在第一行或第一列:
如图所示,第一行和第一列全都是 1 ,它们的坐标要么 x 轴有 1 ,要么 y 轴有 1 ,要么都有。
所以:
if(i==1||j==1){
cout<<1<<" ";
}
第二种情况:i 和 j 相等:
如图所示,如果 x 轴和 y 轴相等,这个位置的数字就等于 x 轴和 y 轴的数。
所以:
else if(i==j){
cout<<i<<" ";
}
其他情况:(蓝色部分)
得出:
else{
cout<<i+j-max(i,j)<<" ";
}
这道题就写完啦!
完整代码:
#include<iostream>
using namespace std;
int main(){
int n;
cin>>n;
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
if(i==1||j==1){
cout<<1<<" ";
}else if(i==j){
cout<<i<<" ";
}else{
cout<<i+j-max(i,j)<<" ";
}
}
cout<<endl;
}
return 0;
}