用字符打印中文字“里”
空间复杂度为O(n);可能会爆。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main() {
int n;
scanf("%d", &n);
int size = 11 * n;
char li[size + 10][size + 10];
memset(li, '.', sizeof(li));
//首先着底色 "."
for (int i = 0; i < size; i++) {
for(int j = 0; j < size; j++){
li[i][j] = '.';
}
}
//图案的第1部分:"..*******.."
for(int i = 1*n;i<2*n;i++){
for(int j = 2*n;j<9*n;j++)
li[i][j] = '*';
}
//图案的第2部分:"..*..*..*.."
for(int i = 2*n;i<3*n;i++){
for(int j = 2*n;j<size;j+=3*n)
for(int k=j;k<j+n;k++) li[i][k] = '*';
}
//图案的第3部分:"..*******.."
for(int i = 3*n;i<4*n;i++){
for(int j = 2*n;j<9*n;j++)
li[i][j] = '*';
}
//图案的第4部分:"..*..*..*.."
for(int i = 4*n;i<5*n;i++){
for(int j = 2*n;j<size;j+=3*n)
for(int k=j;k<j+n;k++) li[i][k] = '*';
}
//图案的第5部分:"..*******.."
for(int i = 5*n;i<6*n;i++){
for(int j = 2*n;j<9*n;j++)
li[i][j] = '*';
}
//图案的第6部分:".....*....."
for(int i = 6*n;i<7*n;i++){
for(int j = 5*n;j<size;j+=6*n)
for(int k=j;k<j+n;k++) li[i][k] = '*';
}
//图案的第7部分:"..*******.."
for(int i = 7*n;i<8*n;i++){
for(int j = 2*n;j<9*n;j++)
li[i][j] = '*';
}
//图案的第8部分:".....*....."
for(int i = 8*n;i<9*n;i++){
for(int j = 5*n;j<size;j+=6*n)
for(int k=j;k<j+n;k++) li[i][k] = '*';
}
//图案的第9部分:".*********."
for(int i = 9*n;i<10*n;i++){
for(int j = 1*n;j<10*n;j++)
li[i][j] = '*';
}
//打印结果
for (int i = 0; i < size; i++) {
for(int j = 0; j < size; j++){
printf("%c", li[i][j]);
}
printf("\n");
}
return 0;
}
空间复杂度为O(1)。 反正都很丑,但容易理解 :)
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main() {
int n;
scanf("%d", &n);
int size = 11 * n;
//图案的第0部分:"..........."
for(int i = 0*n;i<1*n;i++){
for(int j = 0*n;j<11*n;j++)
printf(".");
printf("\n");
}
//图案的第1部分:"..*******.."
for(int i = 1*n;i<2*n;i++){
for(int j=0;j<2*n;j++)
printf(".");
for(int j = 2*n;j<9*n;j++)
printf("*");
for(int j=9*n;j<size;j++)
printf(".");
printf("\n");
}
//图案的第2部分:"..*..*..*.."
for(int i = 2*n;i<3*n;i++){
for(int j=0;j<2*n;j++)
printf(".");
for(int j=2*n;j<3*n;j++)
printf("*");
for(int j=3*n;j<5*n;j++)
printf(".");
for(int j=5*n;j<6*n;j++)
printf("*");
for(int j=6*n;j<8*n;j++)
printf(".");
for(int j=8*n;j<9*n;j++)
printf("*");
for(int j = 9*n;j<size;j++)
printf(".");
printf("\n");
}
//图案的第3部分:"..*******.."
for(int i = 3*n;i<4*n;i++){
for(int j=0;j<2*n;j++)
printf(".");
for(int j = 2*n;j<9*n;j++)
printf("*");
for(int j=9*n;j<size;j++)
printf(".");
printf("\n");
}
//图案的第4部分:"..*..*..*.."
for(int i = 4*n;i<5*n;i++){
for(int j=0;j<2*n;j++)
printf(".");
for(int j=2*n;j<3*n;j++)
printf("*");
for(int j=3*n;j<5*n;j++)
printf(".");
for(int j=5*n;j<6*n;j++)
printf("*");
for(int j=6*n;j<8*n;j++)
printf(".");
for(int j=8*n;j<9*n;j++)
printf("*");
for(int j = 9*n;j<size;j++)
printf(".");
printf("\n");
}
//图案的第5部分:"..*******.."
for(int i = 5*n;i<6*n;i++){
for(int j=0;j<2*n;j++)
printf(".");
for(int j = 2*n;j<9*n;j++)
printf("*");
for(int j=9*n;j<size;j++)
printf(".");
printf("\n");
}
//图案的第6部分:".....*....."
for(int i = 6*n;i<7*n;i++){
for(int j=0;j<5*n;j++)
printf(".");
for(int j = 5*n;j<6*n;j++)
printf("*");
for(int j=6*n;j<size;j++)
printf(".");
printf("\n");
}
//图案的第7部分:"..*******.."
for(int i = 7*n;i<8*n;i++){
for(int j=0;j<2*n;j++)
printf(".");
for(int j = 2*n;j<9*n;j++)
printf("*");
for(int j=9*n;j<size;j++)
printf(".");
printf("\n");
}
//图案的第8部分:".....*....."
for(int i = 8*n;i<9*n;i++){
for(int j=0;j<5*n;j++)
printf(".");
for(int j = 5*n;j<6*n;j++)
printf("*");
for(int j=6*n;j<size;j++)
printf(".");
printf("\n");
}
//图案的第9部分:".*********."
for(int i = 9*n;i<10*n;i++){
for(int j=0;j<1*n;j++)
printf(".");
for(int j = 1*n;j<10*n;j++)
printf("*");
for(int j=10*n;j<size;j++)
printf(".");
printf("\n");
}
//图案的第10部分:"..........."
for(int i = 9*n;i<10*n;i++){
for(int j=0;j<size;j++)
printf(".");
printf("\n");
}
return 0;
}