Member 13541571 Ответов: 3

Проблема квадратного узора


 1  5  9 13
 4  8 12 16
 7 11 15 19
10 14 18 22



[edit]добавлен блок кода - OriginalGriff[/edit]

Что я уже пробовал:

я могу печатать только натуральные числа в квадратном узоре по строкам и столбцам, например
 1  2  3  4  5
 6  7  8  9 10
11 12 13 14 15

#include<stdio.h>
#include<conio.h>

int main()
{
    int i, j, diff, value, N;

    printf("Enter rows: ");
    scanf("%d", &N);

    for(i=1; i<=N; i++)
    {
        diff = N-1; 
        value = i;  
        for(j=1; j<=i; j++)
        {
            printf("%-3d", value);

            value += diff; 
            diff--;        
        }

        printf("\n");
    }

    return 0;
}

Patrice T

У вас есть заявление ?

3 Ответов

Рейтинг:
2

OriginalGriff

Для начала создайте квадратный массив для хранения данных - в вашем случае 4 x 4:

int data[4][4];
После заполнения, это просто вопрос двух вложенных циклов, чтобы напечатать его:
for (y = 0; y < size; y++)
   {
   for (x = 0; x < size; x++)
      {
      printf("%-3d ", data[x][y]);
      }
   printf("\n");
   }
Наполнение более сложное. В случае данных, которые вы показываете, это не просто, потому что это не "простая последовательность": 2, 3, 6, 17, 20, и 21 "отсутствует", и нет никакого очевидного порядка относительно того, почему.
Если бы это было так:
1  3  6 10  
2  5  9 13 
4  8 12 15 
7 11 14 16
Тогда все намного проще: каждое число попадает в ячейку а, а затем x и y для следующей ячейки пересчитываются, начиная с ячейки (0, 0), прежде чем число увеличивается.
Если x находится в конце строки, то x становится y плюс один, а y-последней строкой.
В противном случае, если y находится в верхней строке, y становится x плюс один, а x становится первым столбцом.
В противном случае x увеличивается, а y уменьшается.


Рейтинг:
2

Patrice T

Цитата:
я могу печатать только натуральные числа в квадратном узоре по строкам и столбцам, например

Как программист, ваша задача-создавать алгоритмы которые решают конкретные задачи. Если мы просто дадим вам ответ, вы никогда не узнаете, как найти его самостоятельно.
Если вам даны только выходные данные, вы должны найти шаблон, используемый для построения выходных данных, другими словами, это похоже на поиск "что будет представлять собой значение пятого столбца или строки?"
1  5  9 13 ??


Мы не делаем вашу домашнюю работу.
Домашнее задание не предназначено для проверки ваших навыков просить других людей сделать вашу работу, оно предназначено для того, чтобы заставить вас думать и помочь вашему учителю проверить ваше понимание курсов, которые вы прошли, а также проблем, которые вы испытываете при их применении.
Любая ваша неудача поможет учителю выявить ваши слабости и наметить меры по исправлению положения.
Любая ваша неудача поможет вам узнать, что работает, а что нет, это называется "методом проб и ошибок".
Так что попробуйте, перечитайте свои уроки и приступайте к работе. Если вы застряли на конкретной проблеме, покажите свой код и объясните эту точную проблему, мы можем помочь.


Рейтинг:
0

CPallini

Вы должны воспользоваться существующими арифметическими соотношениями. В вашем случае

n(r,c) = n = 1 + 3 * r + 4 * c
Следовательно
#include <stdio.h>
int main()
{
  int r, c;
  for (r=0; r<4; ++r)
  {
    for (c=0; c<4; ++c)
    {
      int n = 1 + 3 * r + 4 * c;
      printf("%3d", n);
    }
    printf("\n");
  }
  return 0;
}