循环·5·打印多层金字塔

来源:互联网 发布:淘宝收获日面具 编辑:程序博客网 时间:2024/05/16 17:42

吉首大学2017程序设计-实验1-5


100 分
  1. 编程题共 7 小题,共计 100 分
剩余时间: 1399:12:41

7-3 打印多层金字塔 (15 分)

本题目要求读入2个整数n和m,m表示小金字塔的行数,n代表大金字塔的层数。然后输出多层金字塔。

输入格式:

在一行中层数n和 小金字塔的行数m。

输出格式:

对每一组输入,显示对应的图案

输入样例:

在这里给出一组输入。例如:

2 3

输出样例:

在这里给出相应的输出。例如:

     *    ***   *****  *     * ***   ******** *****——————————————————————————————————————#include<stdio.h>int main(){/*思路是:从最上面开始垒金字塔*/     int M,m,i,j,k,l,s,x,y,a,b=1;/*最终的大金字塔是若干个小金字塔叠加的,每一行小金字塔视为一大层,即为M;小金字塔的层数则为m*/     scanf("%d%d",&M,&m);/*k是递减的空格数,因为大金字塔左边就是一斜到底*//*j是镂空的空格,递增,找一个样例可以观察得到*/     for(l=M;l>0;l--,b++) { /*这个控制大金字塔的层数,有几层,运行几次*/         for(i=0,s=m-1;i<m;i++,s--){/*这个控制小金字塔的层数,有几层,运行几次*/             y=0;/*y每次要重置为零*/             for(k=l*m-i-1;k>0;k--)/*控制金字塔左边的空格*/                 printf(" ");             if(b>1){/*b是1的时候,大金字塔就是小金字塔,但当大层数大于1时,下面的小金字塔中间有空格,所以这里分两种情况*/                 for(j=0;j<(2*i+1)*b;j++){/*用来控制下层小金字塔中的空格*/                     printf("*");/*从左边垒小金字塔*/                     y++;                     if(y==2*i+1&&j!=(2*i+1)*b-1){/*通过黑框框测试,一步步把这一大层的小金字塔垒完*/                     y=0;/*y每次要重置为零*/                         for(x=s*2+1;x>0;x--)/*垒完小金字塔垒空格,再循环回去再垒小金字塔*/                             printf(" ");}}}/*垒完这一大层小金字塔再垒下一层的小金字塔*/             else{                     for(j=0;j<2*i+1;j++)/*这里就是讲的只有大金塔内部没有空格的情况*/                         printf("*");}                         printf("\n");}}return 0;} 
原创粉丝点击