我想打印算术序列三角形

时间:2019-06-15 06:58:52

标签: algorithm math sequence

我想像下面的顺序那样打印“数字”三角形。

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 个答案:

答案 0 :(得分:1)

您可以添加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");

尝试此代码(如果它适合您)。另外,请尝试理解代码,如果您有任何疑问,请告诉我。

答案 1 :(得分:0)

小的修改可使代码正常工作

git help fetch

作为变体:

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

答案 2 :(得分:0)

这里有两个建议:

建议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);
}