在打印上下金字塔的通常语句用法应该都是像下面这种
#include <stdio.h>
int main(){
int n;
do{
for(int i=1;i<n;i++){
for(int a=0;a<n-i;a++){
printf(" ");
}
for(int j=0;j<2*i-1;j++){
printf("*");
}
printf("\n");
}
for(int g=n;g>0;g--){
for(int a=n-g;a>0;a--){
printf(" ");
}
for(int j=2*g-1;j>0;j--){
printf("*");
}
printf("\n");
}
} while(scanf("%d",&n)!=EOF);
}
但是我发现用while循环与按位取反运算符的精妙用法直接解决了金字塔中多打印空格的问题,随然解决的问题有很多替代方法但是看见这种“绝迹”用法还是会觉得眼前一亮。各位可以尝试说一下按位取反运算符解决空格问题的实现原理。
#include<stdio.h>
int main()
{
int n;
int i,j;
while(~scanf("%d",&n))
{
for(i=0;i<n;i++)
{
for(j=i;j<n-1;j++)
printf(" ");
for(j=0;j<2*i+1;j++)
printf("*");
printf("\n");
}
for(i=0;i<n-1;i++)
{
for(j=0;j<i+1;j++)
printf(" ");
for(j=0;j<2*(n-i-1)-1;j++)
printf("*");
printf("\n");
}
}
return 0;
}