原题
解题思路:
每行的星号数量自上而下依行增加,每列的星号数量自左向右依次减少,因此设计行列的变量照着前面的变化规律并且用好双循环即可实现
核心代码展示
for(b=1;b<=a;b++)
{
for(c=1;c<=b;c++)
{
printf("* ");
}
printf("\n");
}
坑点:无
整体代码展示:
#include <stdio.h>
int main() {
int a, b,c;
while (scanf("%d", &a) != EOF) {
for(b=1;b<=a;b++)
{
for(c=1;c<=b;c++)
{
printf("* ");
}
printf("\n");
}
}
return 0;
}
变式一:
思路:
每行的星号数量自上而下依行减少,每列的星号数量自左向右依列减少。
因此设计行列的变量照着前面的变化规律并且用好双循环即可实现
核心代码:
int d=a;//缺少这句代码,或者说把d换成a则会出现不完整的三角形(示例中的不完整三角形)
for(c=d;c>0;c--)
{
printf("* ");
}
printf("\n");
a=a-1;
}
如图所示
完整代码展示:
#include <stdio.h>
int main() {
int a;
while (scanf("%d", &a) != EOF) {
int b=0,c=0;
int d=a;
for(b=1;b<=a;b++)
{
for(c=d;c>0;c--)
{
printf("* ");
}
printf("\n");
d=d-1;
}
}
return 0;
}
变式二:
思路:每行的星号自上而下依次增加,每列的星号自左向右依次增加
核心代码:
for(i=0;i<(a-j-1);i++) //坑点:i<(a-j-1
{
printf(" ");
}
for(i=0;i<=j;i++)
{
printf("* "):
}
完整代码展示:
#include <stdio.h>
int main() {
int a=0;
while (scanf("%d", &a) != EOF) {
int b=0,c=0;
for(b=0;b<a;b++)
{
for(c=0;c<(a-b-1);c++)
{
printf(" ");
}
for(c=0;c<=b;c++)
{
printf("* ");
}
printf("\n");
}
}
return 0;
}
变式三:
在变式二的基础上做个旋转
成品如图所示:
思路:
每行的星号数量依次减少,每列的星号数量依次增加
核心代码:
for (c = 0; c <b; c++)
{
printf(" ");
}
for (c = b; c<a; c++)
{
printf("* ");
}
核心代码展示:
#include <stdio.h>
int main() {
int a = 0;
while (scanf("%d", &a) != EOF) {
int b = 0, c = 0;
for (b =0; b<a; b++)
{
for (c = 0; c <b; c++)
{
printf(" ");
}
for (c = b; c<a; c++)
{
printf("* ");
}
/*for (c = 0; c>=b&&c<=a; c++)
{
printf(" ");
}*/
printf("\n");
}
}
return 0;
}
最后做个小总结:
总的来说图案题的难度与一些和数学结合的题相比要低很多,设计者需要找到特殊之处,并进行代码的一步步调试即可设计成功
那么这次就先到这,看懂的同学赶紧动手去试试呗,如有不懂的地方可以在评论区留言,我会在第一时间回复呦