Я хотел бы напечатать треугольник арифметической последовательности - PullRequest
2 голосов
/ 15 июня 2019

Я бы хотел напечатать треугольник с цифрами, как показано ниже.

1 2 4 7 11

3 5 8 12

6 9 13

10 14

15

Предположим, что значение n равно 5.

означает, что в столбце будет 5, а в столбце - 1. также строка 5.

Я обнаружил, что каждый столбец увеличивается на 1 - 2 - 3 -4 и увеличение ряда 2, 3, 4, 5.

Как бы я смог получить этот треугольник?

Я пробовал, как показано ниже, но не могу найти путь со строки 2.

int n;
scanf("%d", &n);
int sum = 0;
int x = 0;
for(int j = 0; j <= 2; j = j + 2)
{
  for(int i = 0; i < n; i++)
  {
    if(i < 2)
    {
      x = 1;
    }

    sum = sum + x+j;
    x++;
    printf("%d ", sum);
  }
  sum = 0;
  printf("\n");
}

Ответы [ 3 ]

1 голос
/ 15 июня 2019

Вы можете добавить цикл 2 FOR, внешний цикл может быть для каждой строки, а внутренний цикл - для каждого значения столбца.

См. Код ниже:

int number, currentValue, nextRowValue, nextColValue;

nextRowValue = 1;
nextColValue = 1;

printf("Number? : ");
scanf("%d", &number);
for(int rowIndex=0; rowIndex < number; rowIndex++)
{
    nextColValue = nextRowValue;

    for (int colIndex = 0; colIndex < number - rowIndex; colIndex++)
    {
        currentValue = colIndex + nextColValue +rowIndex;

        printf("%d \t", currentValue);

        nextColValue = currentValue;
    }

    printf("\n");

    nextRowValue = (nextRowValue + (rowIndex + 1));
}
printf("\n");

Попробуйте этот код, если он работает для вас.Кроме того, попытайтесь понять код или дайте мне знать, если у вас есть какие-либо сомнения.

0 голосов
/ 15 июня 2019

Вот два предложения:

Предложение 1: использование массива для хранения первой строки

#include <stdio.h>

#define N 5

int main(void) {
    int line1[N];
    int i, j;

    line1[0]=1;
    for(i=1;i<N;i++) {
        line1[i]= line1[i-1]+i;
    }

    for(i=0;i<N;i++) {
        for(j=0;j<N-i;j++) {
            printf("%d ", line1[i+j]+i);
        }
        printf("\n");
    }
    return(0);
}

Предложение 2: без сохранения промежуточных результатов

#include <stdio.h>

#define N 5

int main(void) {
    int i, j;
    for(i=0;i<N;i++) {
        for(j=0;j<N-i;j++) {
            printf("%d ", (j+i+1)*(j+i+0)/2+1+i);
        }
        printf("\n");
    }

    return(0);
}
0 голосов
/ 15 июня 2019

Небольшая модификация заставляет код работать правильно

int n;
scanf_s("%d", &n);
for (int line = 0; line < n; line++)
{
    int sum = (line + 1) * (line + 2) / 2;
    for (int col = 0; col < n - line; col++)
    {
        sum = sum + col;
        printf("%d ", sum);
        sum = sum + line;
    }
    printf("\n");
}

6
1 2 4 7 11 16
3 5 8 12 17
6 9 13 18
10 14 19
15 20
21

Как вариант:

int base = 1;
for (int line = 0; line < n; line++)
{
    int sum = base + line;
    for (int col = 0; col < n - line; col++)
    {
        sum = sum + col;
        printf("%d ", sum);
        sum = sum + line;
    }
    base = base + line + 1;
    printf("\n");
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...