Печать шаблона с использованием петель - PullRequest
0 голосов
/ 16 января 2019

Я решаю проблему на хакерранке.Он печатает число в виде спирали, уменьшая его значение при каждом завершении круга.

4 4 4 4 4 4 4
4 3 3 3 3 3 4
4 3 2 2 2 3 4
4 3 2 1 2 3 4
4 3 2 2 2 3 4
4 3 3 3 3 3 4
4 4 4 4 4 4 4

//Printing Pattern using Loops
/* for eg. for n = 4 
  4 4 4 4 4 4 4
  4 3 3 3 3 3 4
  4 3 2 2 2 3 4
  4 3 2 1 2 3 4
  4 3 2 2 2 3 4
  4 3 3 3 3 3 4
  4 4 4 4 4 4 4
 */
 //Author: Arvind Bakshi
 #include <stdio.h>
 #include <string.h>
 #include <math.h>
 #include <stdlib.h>

int main() 
{

int n,row,col,size;
scanf("%d", &n);
// Complete the code to print the pattern.
size=2*n-1;
  int arr[size][size];
  //n=n+1;
    while(n>0){
        row=0;
        col=0;
        while(col<size){
          arr[row][col] = n;
          col++;
        }
        col=size-1;
        row=0;
        while(row<size){
            arr[row][col]=n;
            row++;
        }
        row = size-1;
        col = size-1;
        while (col >=0) {
          arr[row][col] = n;
          col--;
        }
        col = 0;
        row = size-1;
        while (row >=0) {
          arr[row][col] = n;
          row--;
        }
        n--;
    }
    for(row=0;row<size;row++){
        for(col=0;col<size;col++){
            printf("%d",arr[row][col]);
        }
        printf("\n");
    }
return 0;
}

Ожидаемый результат равен

 2 2 2 
 2 1 2 
 2 2 2

Я получаю

111
101
111

В Интернете доступно множество кодов, я просто хочу знать свою ошибку, в которой я делаю ошибку.Пожалуйста, не отмечайте это как повтор.

Ответы [ 2 ]

0 голосов
/ 16 января 2019

Если производительность и «перезапись» не имеют значения, вы можете попробовать эту интуитивно понятную короткую версию.

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

int main() 
{
  int n, size;
  scanf("%d", &n);
  size=2*n-1;
  int arr[size][size];

  for(int i=0; i<n;i++)
      for(int row=i; row<size-i; row++)
          for(int col=i; col<size-i; col++)
            arr[row][col] = n-i;

  for(int row=0; row<size; row++) {
    for(int col=0; col<size; col++)
      printf("%d ",arr[row][col]);
    printf("\n");
  }
  return 0;
}
0 голосов
/ 16 января 2019

Проверьте этот код. Онлайн-компилятор Я использовал ваш же код с дополнительным буфером «х». Это заставляет кадр перемещаться по петле в убывающей спирали.

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

int main() 
{
  int n,row,col,size;
  scanf("%d", &n);
  // Complete the code to print the pattern.
  size=2*n;
  int x = n;
  int arr[size-1][size-1];
  //n=n+1;
  while(n>0){
    row=x-n;
    col=x-n;
    while(col<size-(x-n)-2){
      arr[row][col] = n;
      col++;
    }
    col=size-(x-n)-2;
    row=x-n;
    while(row<size-(x-n)-1){
      arr[row][col]=n;
      row++;
    }
    row = size-(x-n)-2;
    col = size-(x-n)-2;
    while (col >x-n) {
      arr[row][col] = n;
      col--;
    }
    col = x-n;
    row = size-(x-n)-2;
    while (row > x-n) {
      arr[row][col] = n;
      row--;
    }
    n--;
  }
  for(row=0;row<size-1;row++){
    for(col=0;col<size-1;col++){
      printf("%d ",arr[row][col]);
    }
    printf("\n");
  }
  return 0;
}


Это ваши ожидаемые результаты. for input 2 for input 4

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...