图案问题 → 二维数组 + 找数字规律
图片来自王道机试课程
OJ当中的各种错误
- Wrong Answer → 答案错误 → 思路有问题,少考虑了某些场景
- Accepted → 通过
- Compilation Error → 编译错误 → 一般是复制粘贴时产生的问题
- Presentation Error → 表示错误 → 换行有问题,多打或者少打了换行 → 重新读题目
代码
#include <cstdio>
//叠筐
int main() {
int n;// n 是外框的长度
char inner,outter;//内和外的花色
bool flag = true;//flag用来判断是否是第一个结果
while(scanf("%d %c %c",&n,&inner,&outter) != EOF){
//处理空行的显示
if(flag == true){
flag = false;
} else{
printf("\n");
}
//scanf %d -- 十进制 %f -- 浮点数 %o -- 八进制 忽略空白字符
//scanf %c -- 字符 可以读取空白字符(空格和换行)
//scanf %c 如果前面有空格,则忽略空白字符
//printf("n = %d, inner = %c, outter = %c",n,inner,outter);
//数值上'\0'、NULL、0都是相等的,存入char中时都可以作char字符串的字符串结束符
char pattern[80][80] = {0};//二维数组的长度要写固定
//在定义二维数组时,可以初始化
int length = 1; //外框的长度
int x,y;
char curChar = inner;//用来填充的花色
for (length = 1, x = n/2, y = n/2; length <= n ; length = length + 2, --x, --y) {
// x和y是起点的下标
// 填满一个长度为length的正方形
// 从左上到左下
for (int i = x, j = y; i < x+length; ++i) {
// j不变,i从x到x+length-1
pattern[i][j] = curChar;
}
// 从上左到上右
for (int i = x, j = y; j < y+length; ++j) {
// i不变,j从y到y+length-1
pattern[i][j] = curChar;
}
// 从下左到下右
for (int i = x+length-1, j = y; j < y+length; ++j) {
// i不变 i = x+length-1,j从y到y+length-1
pattern[i][j] = curChar;
}
// 从右上到由下
for (int i = x, j = y+length-1; i < x+length; ++i) {
// j不变 j = y+length-1,i从x到x+length-1
pattern[i][j] = curChar;
}
// 更换花色
if(curChar == inner){
curChar = outter;
} else{
curChar = inner;
}
}
//磨掉4个角
if(n != 1){
pattern[0][0] = ' ';
pattern[0][n-1] = ' ';
pattern[n-1][0] = ' ';
pattern[n-1][n-1] = ' ';
}
//按行打印
for(int i = 0; i < n; ++i){
printf("%s\n",pattern[i]);
}
}
return 0;
}
结果