#include <stdio.h> #include <stdlib.h> #include <string.h> #define COL 3 //每层3行 #define ROW 4 //圣诞树层数(每层3行) char *list[] = { "*\0", "***\0", "*****\0", "*******\0", "*********\0", "***********\0" }; main() { int i,j,k,len,listlen; k=0; listlen = sizeof(list)/sizeof(list[0]);//取list数组长度 len = strlen(list[listlen -1])/2 + 1;//最后一行的长度除以2,用来生成空格用的,既最大空格数 for(i=0;i<ROW*COL;i++)//循环总行数(圣诞树层数乘以每层行数) { /*strlen(list[k])/2 + 1 得到本行你所站用空格的各数*/ /*len-(strlen(list[k])/2 + 1) 总空格"减"本行站用的空格*/ for(j=0;j<len-(strlen(list[k])/2 + 1);j++)//循环打印空格 { putchar(' '); } printf("%s\t\t%d\n",list[k],k);//打印 "*" k++; if(i%3==2)//说明打印好一层圣诞树 k-=2;//移到下层圣诞树需要打印的下标 } for(i=0;i<4;i++) { for(j=0;j<len-2;j++)//循环打印空格 { putchar(' '); } printf("|||\n"); } }
?由于上次eye无故封我发表文章,所以一直都没有登eye了,今天来特地送个圣诞节礼物给大家。:)
新手可以试着做做,这是我以前看到的一个面试题,在很短时间内做出来还是有点小难度的哈哈。
?
效果如下:
?? ? ? ? ? ? ? ? ? ? ?*
?? ? ? ? ? ? ? ? ? ?***
?? ? ? ? ? ? ? ? ?*****
?? ? ? ? ? ? ? ? ? ?***
?? ? ? ? ? ? ? ? ?*****
?? ? ? ? ? ? ? ?*******
?? ? ? ? ? ? ? ? ?*****
?? ? ? ? ? ? ? ?*******
?? ? ? ? ? ? ?*********
?? ? ? ? ? ? ? ? ? ? ?|
?? ? ? ? ? ? ? ? ? ? ?|
?? ? ? ? ? ? ? ? ? ? ?|
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?