zzuli OJ 1077:空心菱形

题目描述

输入一个整数n,(1<=n<=20),输出一个空心菱形,其中每个边由n个’*’组成

输入:

输入包含一个整数,n(1<=n<=20)

输出:

输出一个空心菱形,每个边由n个’*’组成

样例输入

1
5

样例输出

1
2
3
4
5
6
7
8
9
    *
* *
* *
* *
* *
* *
* *
* *
*

我的解法(题目没要求多组输入):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <stdio.h>
int main()
{
int n;
while(scanf("%d",&n)!=EOF){
int i,j;
for(i=0;i<2*n-1;i++){
for(j=0;j<2*n-1;j++){
if(j-i==n-1||i+j==n-1||i-j==n-1||i+j==3*n-3){
printf("*");
}else{
printf(" ");
}
}
printf("\n");
}
}
}

首先我们会发现填*的i和j满足某种函数关系,如果输入为n,我们可用以下框架建立一个空白棋盘,然后我们只需要找到i和j在矩阵中的一种或多种关系,以及棋盘的大小范围,就能随心所欲,画出想要的图案

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <stdio.h>
int main()
{
int n;
while(scanf("%d",&n)!=EOF){
int i,j;
for(i=0;i<行的范围;i++){
for(j=0;j<列的范围;j++){
if(i和j在矩阵中的一种或多种关系){
printf("*");
}else{
printf(" ");
}
}
printf("\n");
}
}
}

再举一个X形图案例子(牛客网bc68)

描述

KiKi学习了循环,BoBo老师给他出了一系列打印图案的练习,该任务是打印用“*”组成的X形图案。

输入描述:

多组输入,一个整数(2~20),表示输出的行数,也表示组成“X”的反斜线和正斜线的长度。

输出描述:

针对每行输入,输出用“*”组成的X形图案。

示例1

输入:

1
5

输出:

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

可以用刚刚提到的框架写:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <stdio.h>
int main()
{
int n;
while(scanf("%d",&n)!=EOF){
int i,j;
for(i=0;i<n;i++){
for(j=0;j<n;j++){
if(i==j||i+j==n-1){
printf("*");
}else{
printf(" ");
}
}
printf("\n");
}
}
}

你学废了吗,嘿嘿

可能对你来说太简单了

其实我们还可以用< >号来填充图形或镂空图形,总之,这不比嵌套的if语句简单?

感谢大佬的光临让本站蓬荜生辉 : )