首页 > 解决方案 > 在 c 中打印回文钻石

问题描述

我试图根据用户的输入生成回文钻石。例如,如果用户输入 = 3,则生成的模式将是:

  1
 121
12321
 121
  1

但是,我当前的代码正在生成:

  1
 121
12321
 1234321
  123454321

我对出了什么问题有所了解,但我对如何改变它已经没有想法了。任何人都可以提供一些见解吗

#include<stdio.h>

int main(void) {

    int n, i, j;

    printf("Enter an integer: ");
    scanf("%d", &n);

    int rows = n*2-1;
    int spaces = n-1;

    for(i=1; i<=rows; i++) {
        for(j=1; j<=spaces; j++) 
            printf(" ");

        for (j=1; j<=i; j++) 
            printf("%d", j);

        for (j=i-1; j>=1; j--) 
            printf("%d", j);
        
        if (i<n) {
            spaces--;
        } else {
            spaces++;
        }

        printf("\n");

    }
    return 0;
}

标签: c

解决方案


错误:

您正在对第一行执行正确的操作,但随后您将继续相同的事情(对于结构的下一部分),而不是反转下一部分的逻辑。

逻辑:

因此,对于第一部分使用一个 for 循环,对结构的第二部分使用另一个 for 循环。

代码:

#include <stdio.h>

int main() {

    int n = 0, i = 0, j = 0;

    printf("Enter an integer: ");
    scanf("%d", &n);

    int rows = n, spaces = n - 1;

    for(i = 1; i <= rows; i++) {
        for(j = 1; j <= spaces; j++) 
            printf(" ");

        for (j = 1; j <= i; j++) 
            printf("%d", j);

        for (j = i - 1; j >= 1; j--) 
            printf("%d", j);

        spaces--;

        printf("\n");

    }

    spaces = 1;
    for(i = rows - 1; i >= 1; i--) {
        for(j = 1; j <= spaces; j++) 
            printf(" ");

        for (j = 1; j <= i; j++) 
            printf("%d", j);

        for (j = i - 1; j >= 1; j--) 
            printf("%d", j);

        spaces++;

        printf("\n");

    }

    return 0;
}

推荐阅读