从12月开始,阿崽就没更新啦,阿崽刷了一波题

接下来的一段时间,准备更新我的刷题的文,有的题有不同思路,欢迎各位宝子和我一起交流

牛客网—–循环输出图形

  • BC98 线段图案
  • BC99 正方形图案
  • BC100 直角三角形图案
  • BC101 翻转直角三角形图案
  • BC102 带空格直角三角形图案
  • BC103 金字塔图案
  • BC104 翻转金字塔图案
  • BC105 菱形图案
  • BC106 K形图案
  • BC107 箭形图案
  • BC108 反斜线形图案
  • BC109 正斜线形图案
  • BC110 X形图案
  • BC111 空心正方形图案
  • BC112 空心三角形图案
  • BC113 数字三角形

BC98 线段图案

分析:1.多组输入应该使用循环(即while(scanf(“%d”,x)!=EOF)2.输入的数字和*相对应

代码实现

#include ​int main() {int a;while (scanf("%d", &a) != EOF) {for (int i = 0; i < a; i++) {printf("*");}printf("\n");}​return 0;}

BC99 正方形

分析:1.和BC98一样需要我们循环输入,还是使用while(scanf(“%d”,x)!=EOF);

2.该图像涉及行和列,所以二重循环可以解决,变量i控制行的变化,变量j控制列的变化,由于每一行结束要换行,所以我们在列的值达到我们输入的值后,输入printf(“\n”);

代码实现

#include int main(){int x;while (scanf("%d", &x)!=EOF)//连续输入{for (int i = 1; i <= x; i++) //控制行数{for (int j = 1; j <= x; j++)//控制列数{printf("* ");}printf("\n");}}return 0;}

BC100 直角三角形图案

分析:

1.和BC99一样都涉及到行和列的变化,所以仍是使用双重循环,变量i控制行,变量j控制列。2.当i==1是只有一列,i==2时有两列,所以for循环中控制语句有j<=i,列数的变化要小于行的变化

#include ​int main() {int a;while (scanf("%d", &a) != EOF) {for(int i=1;i<=a;i++){ for(int j=1;j<=i;j++){ printf("* "); } printf("\n"); }}return 0;}

BC101 翻转直角三角形图案

思路一:从行的角度

分析:1.和BC99一样涉及到行和列的变化,仍是使用双重循环

2.换一种思路:我们把第一行看做是第五行,也就是第五行有五列,第一行有一列,所以i从输入的值开始减到1,而列j仍然是从1开始,只要j小于等于i就行,比如i==5,j从1到5;i==4,j从1到4;

代码实现

#includeint main() {int a;scanf_s("%d", &a);for (int i = a; i > 0; i--) {for (int j = 1; j <= i; j++) {printf("* ");}printf("\n");}return 0;}

思路二:从列的角度

分析:1.和BC99一样涉及到行和列的变化,仍是使用双重循环

2.与BC100不一样的:第一行的时候有5列,最后一行只有一列,所以j的一层for循环只需从(输入的值)变到1即可,并且j的值要>=i的值,而i还是从1开始到输入的值

代码实现

#include ​int main() {int a;while (scanf("%d", &a) != EOF) { for(int i=1;i=i;j--){printf("* ");}printf("\n");}}return 0;}

BC102 带空格直角三角形图案

分析:仍是使用双重循环(以四行四列为例)

当i==1时 前三列是空格,第四列是*

当i==2时,前两列是空格,第三列往后是*

当i==3时,前一列是空格,第二列往后是*

。。。

所以是一个三角(全是空格),一个三角(带*)

于是一个for循环用来打印空格三角,另外一个打印带*

第一列有三个空格(输入的值是4,所以空格变化范围是从1到4-1)后面的*就是从1开始,小于等于输入的值即可

#include ​int main() {int a;while (scanf("%d", &a) != EOF) {for (int i = 1; i = i; j--) {printf("");}for (int h = 1; h <= i; h++) {printf("* ");}printf("\n");}​}return 0;}

BC103 金字塔图案

分析:以输入4为例

当你把这两个完全不同的图案放到一起的时候,可能还有点错觉,只需要第二个图的代码在输出*后面加个空格就是第一个图

代码实现:

#include ​int main() {int a;while(scanf("%d",&a)!=EOF){for (int i = 1; i  i; j--) {printf(" ");}for(int h=1;h<=i;h++){printf("* ");}printf("\n");} }return 0;}

BC104翻转金字塔图案

分析:只需要第二个图中*后面加个空格即可

思路一:从行出发

i==1,j==5;空格:0个

i==2,j==4;空格:1个

i==3,j==3;空格:2个

i==4;j==2;空格:3个

i==5,j==1;空格:4个

代码实现

#includeint main() {int a;scanf("%d", &a);for (int i = 1; i <= a; i++) {for (int h = 1; h =i; j--) {printf("* ");}printf("\n");}}

思路二:从列出发

分析:把第一行看成第五行

即i==5;j==5;空格数为0

i…..

i==1;j==5;空格数为4

代码实现:

#include ​int main() {int a;while (scanf("%d", &a) != EOF) {for (int i = a; i >0; i--) {for (int j = a - 1; j >=i; j--) {printf(" ");}for (int h = 1; h <= i; h++) {printf("* ");}printf("\n");}​}return 0;}

BC105 菱形图案

分析:图形由两部分组成:上半部分是金字塔图案,下半部分是翻转金字塔图案

即就是BC103和BC104的结合,唯独有一点不同就是下半部分要比输入的值少一层

代码实现

#include ​int main() {int a;while (scanf("%d", &a) != EOF) {for (int i = 1; i  i; j--) {printf(" ");}for (int h = 1; h <= i; h++) {printf("* ");}printf("\n");}for (int i = 1; i <= a; i++) {for (int j = 1; j = i; h--) {printf("* ");}printf("\n");}}return 0;}

同理,这里的代码也可以用上面提到的两种思路来实现

BC106 K形图案

分析:该图形由两部分组成,一个是直角三角形图案另外一个是翻转直角三角形,但是:上半部分要比输入的值多一层,下半部分没有第一层;

代码实现

#include ​int main() {int a;while(scanf("%d", &a)!=EOF){for (int i = a + 1; i >= 1; i--) {for (int j = 1; j <= i; j++) {printf("* "); }printf("\n"); }for (int i = 2; i <= a + 1; i++) {for (int j = 1; j <= i; j++) {printf("* "); }printf("\n");}}return 0;}

当然也可以使用我们上面说的行和列两种不同的思路来实现

BC107 箭形图案

分析:当我们把这个图案加一个空格后就变成了

这样我们就有了这个题的思路了

将图案分成两部分,一个是我们旋转我们的直角三角形图案

另外一个是我们旋转我们的翻转直角三角形图案

代码实现

#includeint main(){int num;int i,j,k;while(scanf("%d",&num)!=EOF)//将火箭图案从中间分开 上部分一个大循环 下部分一个循环{for(i=0;i<=num;i++)//上部分循环从此开始此处确定了上部分循环的行数{for(j=0;j<num-i;j++)//此处为先开始打印空格{printf("");}for(k=0;k<=i;k++)//此处打印图案*{printf("*");}printf("\n");//至此一次大循环完成 打印了一行的图形 在此换行}for(i=0;i<num;i++){for(j=0;j<=i;j++){printf("");}for(k=0;k<num-i;k++){printf("*");}printf("\n");}}return 0;}​

BC108 反斜线形图案

分析:

以4行4列为例:我们发现*所在的行和列都相等;

由此得出本题

代码实现:

#includeint main() {int a;while(scanf("%d", &a)!=EOF){for (int i = 1; i <= a; i++) {for (int j = 1; j <=i; j++) {if (i == j) {printf("*");}else {printf(" ");}}printf("\n");}}return 0;}

BC109 正斜线形图案

分析:

由图得出:带*的行和列加起来都是4(输入的值)+1

代码实现

#includeint main(){int ch = 0;while(scanf("%d", &ch)!=EOF){for (int i = 1; i <= ch; i++) {for (int j = 1; j <=ch; j++) {if (i + j == ch+1) {printf("*");}else {printf(" ");}}printf("\n");}}return 0;}

BC110 x形图案

分析:

该图由反斜线形和正斜线形图案构成

条件为行数等于列数,或者行数加列数=输入数+1;

代码实现

#include ​int main() {int a;while (scanf("%d", &a) != EOF) { for(int i=1;i=1;j--){if((i+j==a+1)||(i==j)){printf("*");}else{printf(" ");}}printf("\n");} }return 0;}

BC111 空心正方形图案

分析:

以4*4为例 ,先看第一行和最后一行是全输出,中间两行第一列和最后一列需要输出 *,由此得出代码

代码实现

#include int main(){int n = 0;while(scanf("%d", &n) != EOF){for(int i=0; i<n; i++){ for(int j=0; j<n; j++) {if(i==0||i==n-1||j==0||j==n-1) printf("* "); else printf(""); } printf("\n"); }}}​​

BC112 空心三角形图案

分析

以4*4为例,先看前三行:第一列是全打印,后面两列 *所在位置的行和列是相等的,然后再看第四行是全输出,由此得出代码

#include ​int main() {int a;while (scanf("%d", &a) != EOF) {for (int i = 1; i <= a; i++) {for (int j = 1; j <= a; j++) {if (j == 1 || i == j) {printf("* ");}else if (i == a) {printf("* ");}else {printf("");}}printf("\n");}}return 0;}

BC113 数字三角形

分析:以4*4为例

i==1,j==1,数字:1

i==2,j==2,数字:1,2

。。。。

所以类似于九九乘法表,列数小于等于行数

然后打印列数即可

代码实现

#includeint main() {int a;scanf_s("%d", &a);for (int i = 1; i <= a; i++) {for (int j = 1; j <= i; j++) {printf("%d ", j);}printf("\n");}}

今天阿崽就写到这吧,以上几道题都是找规律的题,善于画图和观察就能解出来,方法还有很多,大家可以思考。剩余了一个圣诞树,我们下期再更。