原题
解题思路:
每行的星号数量自上而下依行增加,每列的星号数量自左向右依次减少,因此设计行列的变量照着前面的变化规律并且用好双循环即可实现
核心代码展示
? ? 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;
}
最后做个小总结:
总的来说图案题的难度与一些和数学结合的题相比要低很多,设计者需要找到特殊之处,并进行代码的一步步调试即可设计成功
那么这次就先到这,看懂的同学赶紧动手去试试呗,如有不懂的地方可以在评论区留言,我会在第一时间回复呦
?