用循环画出下面的图,每个小三角形的行数也是输入的数
我的答案
#include <stdio.h>
int main()
{
int i,n,m,q,b,k,x;
printf("input:");
scanf("%d",&i);
for(n=1;n<=i*i;n++)
{
x=n/i+1;
for(q=1;q<=i;q++)
{
b=1;
for(m=1;m<=i*i-n;m++)
printf(" ");
for(k=1;k<=2*x-1;k++)
{
if(b%2==1)
{
for(m=1;m<=q;m++)
printf("*");
for(m=1;m<q;m++)
printf("*");
b++;
}
else if(b%2==0)
{
for(m=1;m<=2*i-2*q+1;m++)
printf(" ");
b++;
}
}
n++;
putchar('\n');
}
n--;
}
return 0;
}
答案给出的答案
#include <stdio.h>
int main()
{
int n,i=-1,j;
for(scanf("%d",&n);++i<n*n;putchar(10))
{
for(j=i-n*n+1;j<=i+i;j++)
{
putchar(j%(n+n)>i%n*2||j<0?32:42);
}
}
return 0;
}
分析:
两个算法都是对每一行的空格和 * 找规律来的。
我的算法找到的规律没有答案的规律直接。
答案是在第一个 *出现前,全部都是负数,这时候输出空格、当第一个 *输出后就开始以2n为一组来找其中该输出 *的地方。并且使用了三目运算使算法更简洁。