目录
一,写在前面
二,习题
1,线段图案
2, 正方形图案
3, 直角三角形图案
4,翻转直角三角形图案
5,带空格直角三角形图案
6,金字塔图案
7,翻转金字塔图案
8,菱形图案
9, K形图案
10,箭形图案
11,反斜线形图案
12,正斜线形图案
13,X形图案
14,空心正方形图案
15,空心三角形图案
在刷牛客网习题时,突然发现了一系列打印图形的练习题,发现了其中打印的魅力和算法的精髓,世间万物,只要你能写出合理的代码,都可以顺利的打印。如果你认为此篇博客写的不错的话,求收藏,求点赞,求评论。废话不多说,让我们学习起来吧!!!
KiKi学习了循环,BoBo老师给他出了一系列打印图案的练习,该任务是打印用“*”组成的线段图案。
输入:
10
2
输出:
********** **
这道题还是比较简单,算是入门级别,会循环就可以了
#include
int main()
{
int i = 0;
int j = 0;
while(scanf("%d",&j) != EOF)
{
for(i = 0; i < j; i++)
{
printf("*");
}
printf("\n");
}
return 0;
}
KiKi学习了循环,BoBo老师给他出了一系列打印图案的练习,该任务是打印用“*”组成的正方形图案。
输入:
4输出:
* * * * * * * * * * * * * * * *输入:
5输出:
* * * * * * * * * * * * * * * * * * * * * * * * *
和第一题一样,都是比较简单的,但要主要循环的限制,下面两道题就会从这里开始衍生。
#include
int main()
{
int a,j;
while(scanf("%d", &a) != EOF)
{
int i = 0;
for(i = 0; i < a; i++)
{
for(j = 0; j < a; j++)
{
printf("* ");
}
printf("\n");
}
}
return 0;
}
KiKi学习了循环,BoBo老师给他出了一系列打印图案的练习,该任务是打印用“*”组成的直角三角形图案。
输入:
4输出:
* * * * * * * * * *输入:
5输出:
* * * * * * * * * * * * * * *
当我们只打印单个图形不是拼接的图形时,我们打印就应该从两个循环嵌套开始,我们经过观察发现第二层循环列受循环控制。列随行的增加而增加* 的个数,直角三角形所占的位置相当于占了4*4正方形的一般位置,由if语句判断打印*.
#include
int main()
{
int n, i, j;
while(scanf("%d", &n) != EOF)
{
for(i = 1; i <= n ; i++)
{
for(j = 0; j < i ; j++)
{
if( j == i - 1)
printf("*\n");
else
{
printf("* ");
}
}
}
}
return 0;
}
KiKi学习了循环,BoBo老师给他出了一系列打印图案的练习,该任务是打印用“*”组成的翻转直角三角形图案。
输入:
5输出:
* * * * * * * * * * * * * * *输入:
6输出:
* * * * * * * * * * * * * * * * * * * * *
倒三角比上一道题相比还算简单,观察发现 n - i控制列的*就可以完成打印
#include
int main()
{
int n, i, j;
while(scanf("%d", &n) != EOF)
{
for(i = 0; i < n ; i++)
{
for(j = 0; j < n - i ; j++)
{
printf("* ");
}
printf("\n");
}
}
return 0;
}
KiKi学习了循环,BoBo老师给他出了一系列打印图案的练习,该任务是打印用“*”组成的带空格直角三角形图案。
输入:
5输出:
* * * * * * * * * * * * * * *输入:
4输出:
* * * * * * * * * *
老样子,还是与完整正方形相比找*下表的规律即可,这次是先打印空格,再打印*,按部就班。
#include
int main()
{
int n,i,j;
while((scanf("%d",&n))!=EOF)
{
for(i=0;i
KiKi学习了循环,BoBo老师给他出了一系列打印图案的练习,该任务是打印用“*”组成的金字塔图案。
输入:
4输出:
* * * * * * * * * *输入:
5输出:
* * * * * * * * * * * * * * *
此题需要三次循环,第一次控制行数,第二次打印空格,第三次控制* 。注意,第三次控制的是* ,方便对齐。
#include
int main()
{
int n;
while (~scanf("%d\n", &n))
{
int i, j;
for (i = 0; i < n; i++)
{
for (j = 0; j < n - i - 1; j++)
{
printf(" ");
}
for (j = 0; j <= i; j++)
{
printf("* ");
}
printf("\n");
}
}
return 0;
}
KiKi学习了循环,BoBo老师给他出了一系列打印图案的练习,该任务是打印用“*”组成的翻转金字塔图案。
输入:
5输出:
* * * * * * * * * * * * * * *输入:
6输出:
* * * * * * * * * * * * * * * * * * * * *
此题有多种打印方法,我参考榜一的解法找到了j < i这个控制非常秒,打印图形就是数学找规律的问题,两次循环直接按照正方形打印,j < i控制图形。
#include
int main()
{
int n;
while (scanf("%d\n", &n) != EOF)
{
int i, j;
for (i = 0; i < n; i++)
{
for (j = 0; j < n ; j++)
{
if (j < i)
{
printf(" ");
}
else
{
printf("* ");
}
}
printf("\n");
}
}
return 0;
}
KiKi学习了循环,BoBo老师给他出了一系列打印图案的练习,该任务是打印用“*”组成的菱形图案。
输入:
2输出:
* * * * * * * * *输入:
3输出:
* * * * * * * * * * * * * * * *
经过上面的两个练习,我们对于这种菱形打印无非就是分开打印上下两部分,具体可以参考上面的思路,注意循环控制的列数。
#include
int main()
{
int n;
while (scanf("%d", &n) != EOF)
{
int i, j;
for (i = 0; i < n + 1; i++)
{
for (j = 0; j <= n - i - 1; j++)
{
printf(" ");
}
for (j = 0; j <= i; j++)
{
printf("* ");
}
printf("\n");
}
for (i = 0; i < n; i++)
{
for (j = 0; j <= i; j++)
{
printf(" ");
}
for (j = i; j < n; j++)
{
printf("* ");
}
printf("\n");
}
}
return 0;
}
KiKi学习了循环,BoBo老师给他出了一系列打印图案的练习,该任务是打印用“*”组成的K形图案。
输入:
2输出:
* * * * * * * * * * *输入:
3输出:
* * * * * * * * * * * * * * * * * * *
对于这种组合图形,就是再一个大循环中逐步打印,找规律,就相当于在一个循环中打印两个三角形,主要还是找规律。
#include
int main()
{
int n;
while (scanf("%d", &n) != EOF)
{
int i, j;
for (i = 0; i < n + 1; i++)
{
for (j = 0; j
KiKi学习了循环,BoBo老师给他出了一系列打印图案的练习,该任务是打印用“*”组成的箭形图案。
输入:
2输出:
* ** *** ** *输入:
3输出:
* ** *** **** *** ** *
这个算是相比与前面算复杂一点,因为它找规律的地方比较繁琐,两个大循环,里面包含打印的两个循环,我第一次做也比较困难,规律找出来打印总是错误,我也一直在练习。找准规律,自然就迎刃而解了。
#include
int main()
{
int n;
while (scanf("%d", &n) != EOF)
{
int i, j;
for (i = 0; i < n + 1; i++)
{
for (j = 0; j < n - i; j++)
{
printf(" ");
}
for (j = 0; j < i + 1; j++)
{
printf("*");
}
printf("\n");
}
for (i = 0; i < n; i++)
{
for (j = 0; j < i + 1; j++)
{
printf(" ");
}
for (j = n - i; j > 0; j--)
{
printf("*");
}
printf("\n");
}
}
return 0;
}
KiKi学习了循环,BoBo老师给他出了一系列打印图案的练习,该任务是打印用“*”组成的反斜线形图案。
输入:
4输出:
* * * *输入:
5输出:
* * * * *
我们发现*就是正方形的斜对角线,两个循环加一个判断语句就可解决。
#include
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)
{
printf("*");
}
else
{
printf(" ");
}
}
printf("\n");
}
}
return 0;
}
KiKi学习了循环,BoBo老师给他出了一系列打印图案的练习,该任务是打印用“*”组成的正斜线形图案。
输入:
4输出:
* * * *输入:
5输出:
* * * * *
我参考一部分博主的解法发现第二循环(j = n; j > i + 1; j--)比较好。
#include
int main()
{
int n;
while (scanf("%d", &n) != EOF)
{
int i, j;
for (i = 0; i < n; i++)
{
for (j = n; j > i + 1; j--)
printf(" ");
printf("*\n");
}
}
return 0;
}
KiKi学习了循环,BoBo老师给他出了一系列打印图案的练习,该任务是打印用“*”组成的X形图案。
输入:
5输出:
* * * * * * * * *输入:
6输出:
* * * * ** ** * * * *
此题就是上面两道题的结合,判断语句判读两个条件即可。
#include
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 || j == n - i - 1)
{
printf("*");
}
else
{
printf(" ");
}
}
printf("\n");
}
}
return 0;
}
KiKi学习了循环,BoBo老师给他出了一系列打印图案的练习,该任务是打印用“*”组成的“空心”正方形图案。
输入:
4输出:
* * * * * * * * * * * *输入:
5输出:
* * * * * * * * * * * * * * * *
这道题就是找正方形的下标,循环控制即可。
#include
int main()
{
int n = 0;
while(scanf("%d", &n) != EOF)
{
for (int i = 0; i < n; i++)
{
if(i == 0 || i == n - 1)
{
for(int j =0; j < n ;j++)
{
printf("* ");
}
}
else
{
printf("*");
for(int j = 0; j < 2 * n - 3; j++)
{
printf(" ");
}
printf("* ");
}
printf("\n");
}
}
return 0;
}
KiKi学习了循环,BoBo老师给他出了一系列打印图案的练习,该任务是打印用“*”组成的“空心”三角形图案。
输入:
4
输出:
* * * * * * * * *输入:
5输出:
* * * * * * * * * * * *
找到三角的三条边的规律即可
#include
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 (j == 0 || i == n - 1 || i == j)
{
printf("* ");
}
else
{
printf(" ");
}
}
printf("\n");
}
}
return 0;
}