经典方法 打印上面和下面
#include<stdio.h>
int main()
{
int a,i,j,k;
for(i=1;i<=3;i++)//控制上面图形的行数
{
for(j=1;j<=3-i;j++)//控制空格
{
printf(" ");
}
for(k=1;k<=2*i-1;k++)//控制符号
{
printf("*");
}
printf("\n");//控制换行
}
for(i=2;i>=1;i--)//下面图形的行数
{
for(j=1;j<=3-i;j++)//控制空格
{
printf(" ");
}
for(k=1;k<=2*i-1;k++)//控制符号
{
printf("*");
}
printf("\n");
}
return 0;
}
找规律打印沙漏
#include<stdio.h>
#include<math.h>
int main()
{
int i,j;
for(i=1;i<=5;i++)//控制总行数
{
for(j=1;j<=5;j++)//控制每行要输出的
{
if(fabs(i-3)>=fabs(j-3))//利用规律找出列与行到最中间的距离之差打印
printf("*");//如果
else
printf(" ");
}
printf("\n");
}
return 0;
}
第二种图形
第一种情况每个字符后面不跟空格
#include<stdio.h>
#include<math.h>
void shalou(int n,char c)
{
int i,j,k,p;
for(i=0,p=n;i<n;i++,p--)
{
for(j=0;j<i;j++)
{
printf(" ");
}
for(k=2*p-1;k>0;k--)
{
printf("%c",c);
}
printf("\n");
}
for(i=n-2,p=2;i>=0;i--,p++)
{
for(j=0;j<i;j++)
{
printf(" ");
}
for(k=0;k<2*p-1;k++)
{
printf("%c",c);
}
printf("\n");
}
}
int main()
{
int n,i,yu;
char c;
scanf("%d %c",&n,&c);
for(i=1;;i++)
{
if(i*i*2-1>=n) break;
}
if(i*i*2-1>n)
{
i--;
yu=n-(i*i*2-1);
}
shalou(i,c);
printf("%d",yu);
}
第二种规律思路不过后面有多余空格 提交的话无法通过不过上面那种情况可以
#include<stdio.h>
#include<math.h>
void shalou(int n,char c)
{
int i,j,k,p;
for(i=1;i<=2*n-1;i++)
{
for(j=1;j<=2*n-1;j++)
{
if(fabs(i-n)>=fabs(j-n)) printf("%c",c);
else printf(" ");
}
printf("\n");
}
}
int main()
{
int n,i,yu;
char c;
scanf("%d %c",&n,&c);
for(i=1;;i++)
{
if(i*i*2-1>=n) break;
}
if(i*i*2-1>n)
{
i--;
yu=n-(i*i*2-1);
}
shalou(i,c);
printf("%d",yu);
}