C에서 다이아몬드 모양 패턴을 인쇄하는 방법은 무엇입니까?

2020-08-01 c

이렇게 다이아몬드 모양 패턴을 인쇄하는 방법? 패턴은 일반적으로 "*"만 사용하지 않고 "."로 수정되지 않습니다.

입력 : 5

출력 :

 .... 0 ..... 
 ... 000 .... 
 ..0.0.0 ... 
 .0..0..0 .. 
 000000000. 
 .0..0..0 .. 
 ..0.0.0 ... 
 ... 000 .... 
 .... 0 ..... 

여기 내 코드 :

#include <stdio.h>
 
int main()
{
    int number, i, k, count = 1;
 
    scanf("%d", &number);
    count = number - 1;
    for (k = 1; k <= number; k++)
    {
        for (i = 1; i <= count; i++)
            printf(".");
        count--;
        for (i = 1; i <= 2 * k - 1; i++)
            printf("0");
        printf("\n");
     }
     count = 1;
     for (k = 1; k <= number - 1; k++)
     {
         for (i = 1; i <= count; i++)
             printf(".");
         count++;
         for (i = 1 ; i <= 2 *(number - k)-  1; i++)
             printf("0");
         printf("\n");
      }
      return 0;
}

Answers

나는 당신의 접근 방식을 유지하면서 재미를 위해 이것을 빠르게 썼지 만 이것이 가장 효율적이거나 가장 우아한 방법은 아닙니다.

int number, i, k, count = 1;

scanf("%d", &number);
for (k = 0; k < number-1; k++){
    i = 1;
    while(i < number-k){
        printf(".");
        i++;
    }
    printf("0");
    i++;
    while(i< number){
        printf(".");
        i++;
    }
    if(i==number){
        printf("0");
        i++;
    }
    while(i<number+k){
        printf(".");
        i++;
    }
    if(k>0){
        printf("0");
        i++;
    }
    while(i<number*2){
        printf(".");
        i++;
    }
    printf("\n");
}

좀 더 자세히 검색 하면 더 나은 답을 찾을 수 있습니다.


또한

void printpir(int number, int k){
         int i = 1;
        while(i < number-k){
            printf(".");
            i++;
        }
        printf("0");
        i++;
        while(i< number){
            printf(".");
            i++;
        }
        if(i==number){
            printf("0");
            i++;
        }
        while(i<number+k){
            printf(".");
            i++;
        }
        if(k>0){
            printf("0");
            i++;
        }
        while(i<number*2){
            printf(".");
            i++;
        }
        printf("\n");
}


int main(int argc, char** argv) {

    int number, i, k, count = 1;
 
    scanf("%d", &number);
    for (k = 0; k < number-1; k++){
        printpir(number, k);
    }

    for(i= 1; i<number*2; i++){
        printf("0");
    }
    printf("\n");
    k--;
    for (; k >= 0; k--)
     {
         printpir(number, k);
      }
      return 0;
}

다음은 for-loop 2 개인 솔루션입니다. 필요한 경우 제 답변을 설명 할 수 있습니다.
이해할 수 있기를 바랍니다 ...

#include <stdio.h>
#include <stdlib.h>

int main() {
    int n, _i, i, _j, j, k;
 
    printf("Number: ");
    scanf("%d", &n);

    for (_i = 1; _i < 2*n; _i++) {
        i = abs(_i - n);
        for (_j = 1; _j <= 2*n; _j++) {
            j = abs(_j - n);
            if (j < n-i) {
                if (i==0 || j == 0 || (i+j==n-1)) {
                    printf("0");
                } else {
                    printf(".");
                }
            } else {
                printf(".");
            }
        }
        printf("\n");
    }
    return 0;
}

원점이 그려 질 다이아몬드 패턴의 대칭 중심 인 데카르트 좌표계를 생각해보십시오. 0y = x + (n - 1) , y = -x + (n - 1) , y = x - (n - 1) , y = -x - (n - 1) , 그리고 축 y = 0 , x = 0 . 그런 다음이 정보를 쉽게 코드화하여 다이아몬드 패턴을 그릴 수 있습니다.

#include <stdio.h>

void print_diamond (int n)
{
    --n;
    for (int y = n; y >= -n; --y) {
        for (int x = -n; x <= n; ++x)
            putchar(x == 0 || y == 0
                    || y == x + n || y == -x + n || y == x - n || y == -x - n
                    ? '0' : '.');
        putchar('\n');
    }
}

int main (void)
{
    print_diamond(5);
}

라인

|| y == x + n || y == -x + n || y == x - n || y == -x - n

줄일 수 있습니다

|| abs(x - y) == n || abs(x + y) == n

stdlib.h 이후에 #include d.

Related