Как напечатать узор в форме ромба в C? - PullRequest
0 голосов
/ 01 августа 2020

как напечатать такой узор в форме ромба? в шаблоне обычно не используется только «*», но он не изменяется с помощью «.»

Вход: 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;
}

Ответы [ 3 ]

0 голосов
/ 01 августа 2020

Вот решение всего с 2 for-loop s. Я могу объяснить свой ответ, если он вам понадобится.
Надеюсь, вы понимаете ...

#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;
}

0 голосов
/ 01 августа 2020

Подумайте о декартовой системе координат, начало которой является центром симметрии ромбовидного узора, который нужно нарисовать. 0 находятся в строках y = 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 д.

0 голосов
/ 01 августа 2020

Я быстро написал это, чтобы сохранить ваш подход, но это не самый эффективный и не самый элегантный способ сделать это.

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;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...