BC115. 超级圣诞树
描述
今天是圣诞节,牛牛要打印一个漂亮的圣诞树送给想象中的女朋友,请你帮助他实现梦想。输入描述
输出描述
示例1
输入:
1
输出:
* * * * * * *
说明:
示例2
输入:
2
输出:
* * * * * * * * * * * * * * * * * * * *
说明:
示例3
输入:
3
输出:
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
说明:
示例4
输入:
4
输出:
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
说明:
C 解法, 执行用时: 3ms, 内存消耗: 784KB, 提交时间: 2022-01-16
#include <stdio.h> int main() { int i, j, k, h, X, Y, n, z,s,m; scanf("%d",&n); i = 1<<n-1; j = 1<<n-1; X = 3*i; Y = 5*j+(j-1); char a[3][5] = {{'*',' ','*',' ','*'},{' ','*',' ','*',' '},{' ',' ','*',' ',' ',}}; char b[X][Y];//= {{1,1,1,1,1},{1,1,1,1,1},{1,1,1,1,1}};//{{0},{0},{0},{0},{0},{0}}; for(i=0;i<X;i++) { for(j=0;j<Y;j++) { //printf("%d ",b[i][j]); b[i][j] = ' '; //printf("%c ",b[i][j]); } //putchar('\n'); } for(i=0;i<3;i++) { for(j=0;j<5;j++) { b[i][j] =a[i][j]; //printf("%c",b[i][j]); } //putchar('\n'); } //for(k=0;k<n;k++) { for(h=0,z=0,k=0,s=0;s<n+n-1;h++,z++,s++,k=0) { if (z>1) { z=0; h--; k=h; m=k; //m++; } //printf("h = %d ",h); //printf("k = %d ",k); //printf("m = %d ",m); //printf("s = %d ",s); //printf("z = %d ",z); //putchar('\n'); for(i=(k>0)*3*(1<<k-1);i<3*(1<<m);i++)//(k>0)*3*(1<<k-1) { for(j=(h>0)*(5*(1<<(h-1))+(1<<(h-1)))-((k>0)<<k-1)*(3);j<5*(1<<h)+(1<<h)-1-((k>0)<<k-1)*(3);j++) { //printf("%d ",j-(h>0)*(5*(1<<h-1)+(1<<h-1)-(k>0)*(n+1))); //printf("%c",b[i][j]); b[i][j] = b[i-(k>0)*3*(1<<k-1)][j-(h>0)*(5*(1<<h-1)+(1<<h-1)-((k>0)<<k-1)*(3))]; } } //putchar('\n'); } } for(i=X-1;i>=0;i--) { for(j=Y-1;j>=0;j--) { printf("%c",b[i][j]); } putchar('\n'); } for(i=0;i<n;i++) { for(j=0;j<Y;j++) { printf("%c",b[X-1][j]); } putchar('\n'); } //printf("%d\n",count); return 0; }
C 解法, 执行用时: 3ms, 内存消耗: 804KB, 提交时间: 2022-02-14
#include <stdio.h> int main() { int i, j; int k, h, n, z,s,m; int rowbegin,rowend,rankbegin,rankend; scanf("%d",&n); //输入数值 int X = 3*(1<<n-1); int Y = 5*(1<<n-1)+(1<<n-1)-1; char b[X][Y]; //定义一个刚好可以存放图形的二维数组 for(i=0;i<X;i++) //将数组初始化,全为空格 { for(j=0;j<Y;j++) { b[i][j] = ' '; } } for(i=0;i<3;i++) //将输入为 1 时的图形存放到数组内 { for(j=0;j<5;j++) { if((i==0 && j%2==0) || (i%2!=0 && j%2!=0) || i==j) { b[i][j] = '*'; } else { b[i][j] = ' '; } } } for(h=0,z=0,k=0,s=0,m=0;s<n+n-1;h++,z++,s++,k=0) //控制循环的次数 { if (z>1) { z=0; h--; k=h; m=k; } rowbegin = (k>0)*3*(1<<k-1); //控制行的开始数值 rowend = 3*(1<<m); //控制行的结束数值 rankbegin = (h>0)*(5*(1<<(h-1))+(1<<(h-1)))-((k>0)<<k-1)*(3); //控制列的开始数值 rankend = 5*(1<<h)+(1<<h)-1-((k>0)<<k-1)*(3); //控制列的结束数值 for(i=rowbegin;i<rowend;i++) { for(j=rankbegin;j<rankend;j++) { b[i][j] = b[i-rowbegin][j-rankbegin]; } } } for(i=X-1;i>=0;i--) //输出树叶 { for(j=Y-1;j>=0;j--) { printf("%c",b[i][j]); } putchar('\n'); } for(i=0;i<n;i++) //输出树干 { for(j=0;j<Y;j++) { printf("%c",b[X-1][j]); } putchar('\n'); } return 0; }
C 解法, 执行用时: 3ms, 内存消耗: 808KB, 提交时间: 2022-03-04
#include <stdio.h> int main() { int i, j; int k, h, n, z,s,m; int rowbegin,rowend,rankbegin,rankend; scanf("%d",&n); //输入数值 int X = 3*(1<<n-1); int Y = 5*(1<<n-1)+(1<<n-1)-1; char b[X][Y]; //定义一个刚好可以存放图形的二维数组 for(i=0;i<X;i++) //将数组初始化,全为空格 { for(j=0;j<Y;j++) { b[i][j] = ' '; } } for(i=0;i<3;i++) //将输入为 1 时的图形存放到数组内 { for(j=0;j<5;j++) { if((i==0 && j%2==0) || (i%2!=0 && j%2!=0) || i==j) { b[i][j] = '*'; } else { b[i][j] = ' '; } } } for(h=0,z=0,k=0,s=0,m=0;s<n+n-1;h++,z++,s++,k=0) //控制循环的次数 { if (z>1) { z=0; h--; k=h; m=k; } rowbegin = (k>0)*3*(1<<k-1); //控制行的开始数值 rowend = 3*(1<<m); //控制行的结束数值 rankbegin = (h>0)*(5*(1<<(h-1))+(1<<(h-1)))-((k>0)<<k-1)*(3); //控制列的开始数值 rankend = 5*(1<<h)+(1<<h)-1-((k>0)<<k-1)*(3); //控制列的结束数值 for(i=rowbegin;i<rowend;i++) { for(j=rankbegin;j<rankend;j++) { b[i][j] = b[i-rowbegin][j-rankbegin]; } } } for(i=X-1;i>=0;i--) //输出树叶 { for(j=Y-1;j>=0;j--) { printf("%c",b[i][j]); } putchar('\n'); } for(i=0;i<n;i++) //输出树干 { for(j=0;j<Y;j++) { printf("%c",b[X-1][j]); } putchar('\n'); } return 0; }
C 解法, 执行用时: 3ms, 内存消耗: 808KB, 提交时间: 2022-01-18
#include <stdio.h> int main() { int i, j; int k, h, n, z,s,m; int rowbegin,rowend,rankbegin,rankend; scanf("%d",&n); //输入数值 int X = 3*(1<<n-1); int Y = 5*(1<<n-1)+(1<<n-1)-1; char b [X][Y]; //定义一个刚好可以存放图形的二维数组 for(i=0;i<X;i++) //将数组初始化,全为空格 { for(j=0;j<Y;j++) { b [i][j] = ' '; } } for(i=0;i<3;i++) //将输入为 1 时的图形存放到数组内 { for(j=0;j<5;j++) { if((i==0 && j%2==0) || (i%2!=0 && j%2!=0) || i==j) { b [i][j] = '*'; } else { b [i][j] = ' '; } } } for(h=0,z=0,k=0,s=0,m=0;s<n+n-1;h++,z++,s++,k=0) //控制循环的次数 { if (z>1) { z=0; h--; k=h; m=k; } rowbegin = (k>0)*3*(1<<k-1); //控制行的开始数值 rowend = 3*(1<<m); //控制行的结束数值 rankbegin = (h>0)*(5*(1<<(h-1))+(1<<(h-1)))-((k>0)<<k-1)*(3); //控制列的开始数值 rankend = 5*(1<<h)+(1<<h)-1-((k>0)<<k-1)*(3); //控制列的结束数值 for(i=rowbegin;i<rowend;i++) { for(j=rankbegin;j<rankend;j++) { b [i][j] = b [i-rowbegin][j-rankbegin]; } } } for(i=X-1;i>=0;i--) //输出树叶 { for(j=Y-1;j>=0;j--) { printf("%c",b [i][j]); } putchar('\n'); } for(i=0;i<n;i++) //输出树干 { for(j=0;j<Y;j++) { printf("%c",b [X-1][j]); } putchar('\n'); } return 0; }
C 解法, 执行用时: 3ms, 内存消耗: 820KB, 提交时间: 2022-05-01
#include <stdio.h> int main() { int i, j; int k, h, n, z,s,m; int rowbegin,rowend,rankbegin,rankend; scanf("%d",&n); //输入数值 int X = 3*(1<<n-1); int Y = 5*(1<<n-1)+(1<<n-1)-1; char b[X][Y]; //定义一个刚好可以存放图形的二维数组 for(i=0;i<X;i++) //将数组初始化,全为空格 { for(j=0;j<Y;j++) { b[i][j] = ' '; } } for(i=0;i<3;i++) //将输入为 1 时的图形存放到数组内 { for(j=0;j<5;j++) { if((i==0 && j%2==0) || (i%2!=0 && j%2!=0) || i==j) { b[i][j] = '*'; } else { b[i][j] = ' '; } } } for(h=0,z=0,k=0,s=0,m=0;s<n+n-1;h++,z++,s++,k=0) //控制循环的次数 { if (z>1) { z=0; h--; k=h; m=k; } rowbegin = (k>0)*3*(1<<k-1); //控制行的开始数值 rowend = 3*(1<<m); //控制行的结束数值 rankbegin = (h>0)*(5*(1<<(h-1))+(1<<(h-1)))-((k>0)<<k-1)*(3); //控制列的开始数值 rankend = 5*(1<<h)+(1<<h)-1-((k>0)<<k-1)*(3); //控制列的结束数值 for(i=rowbegin;i<rowend;i++) { for(j=rankbegin;j<rankend;j++) { b[i][j] = b[i-rowbegin][j-rankbegin]; } } } for(i=X-1;i>=0;i--) //输出树叶 { for(j=Y-1;j>=0;j--) { printf("%c",b[i][j]); } putchar('\n'); } for(i=0;i<n;i++) //输出树干 { for(j=0;j<Y;j++) { printf("%c",b[X-1][j]); } putchar('\n'); } return 0; }