我想像下面的顺序那样打印“数字”三角形。
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");
}
答案 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);
}