【题目链接】
【题目考点】
-
循环结构(嵌套);
-
输出图形;
-
分支结构;
【解题逻辑】
解法1:
- 通过嵌套循环控制图形的行数与列数:
- 外层循环控制图形的行数
- 内层循环控制图形的列数
- 观察图形规律,确定对角线位置:
- 左对角线:行列号相等 (i==j);
- 右对角线:行号 + 列号 = n+1;(起点下标+结束下标)
- 循环判断当前行列位置,若在对角线位置则输出 '+',否则输出 '-';
解法2:
1.通过嵌套循环控制图形的行数与列数:
- 外层循环控制图形的行数
- 内层循环控制图形的列数
-
定义两个游标变量记录每行要输出 '+' 的列坐标,左游标初始为 1,右游标初始为 n;
-
循环判断当前列号是否等于游标值,相等则输出 '+',否则输出 '-';
-
每行输出结束后,左游标自增 1,右游标自减 1,匹配对角线偏移规律;
【题解代码】
解法1:
- 输入1个整数:图形的行列数;
cpp
int n;
cin>>n;
- 循环控制图形的行数与列数;
cpp
for(int i=1;i<=n;i++){ // 一共n行
for(int j=1;j<=n;j++){ // 每行n列
if(i==j || i+j==1+n){ // 如果行号与列号相等 或 行号+列号与n+1相等
cout<<'+'; // 代表在做左对角线上,输出-
}
else{
cout<<'-'; // 否则输出'+'
}
}
cout<<endl; // 输出了一行元素后,需要输出换行
}
解法2:
- 输入1个整数:图形的行列数;
cpp
int n;
cin>>n;
- 定义变量作为游标,记录左对角线与右对角线开始的位置;
cpp
int l=1,r=n;
- 循环控制图形的行数与列数;
cpp
for(int i=1;i<=n;i++){ // 一共n行
for(int j=1;j<=n;j++){ //每行n列
if(j==l || j==r){ // 如果列号与左游标 或 右游标相同
cout<<'+'; // 代表在对角线上
}
else{
cout<<'-';
}
}
// 下一行的游标更新
l++;
r--;
cout<<endl; // 输出了一行元素后,需要输出换行
}