#include "stdio.h"
#include "stdlib.h"
int main(void){
int i,j,t,n,k;
while(scanf("%d",&n)!=1 || n<1){
printf("Input error, exit!\n");
exit(0);
}
k=n&1,n=n/2+k;
for(i=1;i<=n;i++){
for(j=0;j<39-i;printf(" "),j++);
for(t=(i<<1)-1,j=1;j<=t;j++)
printf("%c",(j==1 || j==t || i==n && j&1 ? '*' : ' '));
printf("\n");
}
for(i=n-k;i>0;i--){
for(j=0;j<39-i;printf(" "),j++);
for(t=(i<<1)-1,j=1;j<=t;j++)
printf("%c",(j==1 || j==t || i==n-k && !k && j&1 ? '*' : ' '));
printf("\n");
}
return 0;
}
追问好复杂,没有简单点的吗?,不用stdlib.h
追答#include "stdio.h"
int main(void){
int i,j,t,n,k;
while(scanf("%d",&n)!=1 || n0;i--){
for(j=0;j<39-i;printf(" "),j++);
for(t=(i<<1)-1,j=1;j<=t;j++)
printf("%c",(j==1 || j==t || i==n-k && !k && j&1 ? '*' : ' '));
printf("\n");
}
return 0;
}
追问要判断奇偶吗
j==1||j==t是什么意思
追答你的题明明写着偶数怎么怎么的,明显偶数时和奇数时图形不一样,不判断怎么弄,无论是明判还是暗判,总得判!j==1||j==t是j为1或j为t时……
追问
这是原题
追答你原来的题没有说要实心的,只有空心的,而且说偶数时“中间两排星号”!根据现在的要求修改如下:
实心——
#include "stdio.h"
int main(void){
int i,j,t,n,k;
while(scanf("%d",&n)!=1 || n<1){
printf("Input error, exit!\n");
return 0;
}
k=n&1,n=n/2+k;
for(i=1;i<=n;i++){
for(j=0;j<39-i;printf(" "),j++);
for(t=(i<<1)-1,j=1;j<=t;j++)
printf("%c",'*');
printf("\n");
}
for(i=n-k;i>0;i--){
for(j=0;j<39-i;printf(" "),j++);
for(t=(i<<1)-1,j=1;j<=t;j++)
printf("%c",'*');
printf("\n");
}
return 0;
}
空心——
只要把以上实心代码中的两句printf("%c",'*');改为printf("%c",(j==1 || j==t ? '*' : ' '));就妥!超字符了,全代码发不上来,只好这样了……
追问就是空心菱形⋯⋯题七啊⋯⋯
追答那把实心图也发上来干啥!下面就是空心的:
#include "stdio.h"
int main(void){
int i,j,t,n,k;
while(scanf("%d",&n)!=1 || n<1){
printf("Input error, exit!\n");
return 0;
}
k=n&1,n=n/2+k;
for(i=1;i<=n;i++){
for(j=0;j<39-i;printf(" "),j++);
for(t=(i<<1)-1,j=1;j<=t;j++)
printf("%c",(j==1 || j==t ? '*' : ' '));
printf("\n");
}
for(i=n-k;i>0;i--){
for(j=0;j<39-i;printf(" "),j++);
for(t=(i<<1)-1,j=1;j<=t;j++)
printf("%c",(j==1 || j==t ? '*' : ' '));
printf("\n");
}
return 0;
}
本回答被提问者和网友采纳