私は10個の要素の配列を持っています{a, b, c, d, e, f, g, h, i, j}
。私はそれをこのように印刷したい:
a be cfh dgij
最初の列は、配列の最初の4つの値で構成されていることに注意してください。2番目の列(行2から開始)は、配列の次の3つの値で構成されます。
私のコードを以下に示します
#include <stdio.h>
#define size 10
int main() {
int arr[size] = {14, 22, 34, 57, 44, 42, 33, 55, 48, 47};
int i, j, n, c, maxTemp;
n = 4;
maxTemp = 1;
c = n - 1;
for (i = 0; i < n; i++) {
for (j = i; j < maxTemp; j = j + c) {
printf("%d ", arr[j]);
}
if (maxTemp <= size) {
maxTemp = maxTemp + c + 1;
}
printf("\n");
}
return 0;
}
アレイの場合
int arr[size] = {14, 22, 34, 57, 44, 42, 33, 55, 48, 47};
期待していた
14 22 44 34 42 55 57 33 48 47
しかし得た:
14 22 44 34 42 48 57 33 47 13
ここでは、の値を1つ減らしたかったので、変数のc
値が減っていないために、これが発生している可能性があります。私は試しましたが、理解できませんでした。c
必要なインデックスを見てみましょう。
0
1 4
2 5 7
3 6 8 9
空のスペースを線形の数字で埋めます(後で印刷しません)
0 (3 5 6)
1 4 (6 7)
2 5 7 (8)
3 6 8 9
インデックスは、必要なパターンに従って、列を介して上昇します。
これにより、との線形関係が得られますi
。つまり、インデックスはi + ...
パーツを呼び出して計算されます。
各列(「()」内の入力値を含む)は、前の列の最後の数値よりも高い値で始まり、多かれ少なかれn
。だけ高くなります。
ただし、最初の空の(塗りつぶされた)行と一致させるために、下から開始します(つまり、前の列の値の一部を使用します)。
これにより、との線形関係が得られます。j*n
つまり、が存在します... + j*n
。
試してみましょう。ここにインデックスがありますi+j*n
。
0 4 8 12
1 5 9 13
2 6 10 14
3 7 11 15
これらは高すぎます。
各行で0、1、3、6ずつです。たとえば、最後の行を見てください。
3-0==3 7-1==6 11-3==8 15-6==9
それはj*(j+1)/2
です。
ちなみに自分では見つけられなかったので、お気に入りの検索エンジンで文字通り「0、1、3、6」を検索しました。そしてこれがポップアップしました:https:
//www.mathsisfun.com/algebra/triangular-numbers.html
それをまとめると、正しいインデックスは次のとおりです。
i+j*n - j*(j+1)/2
コード内:
#include<stdio.h>
#define size 10
int main(void) {
int arr[size] = {14, 22, 34, 57, 44, 42, 33, 55, 48, 47};
int i, j, n=4;
for (i = 0; i < n; i++)
{
for (j = 0; j < i+1; j++)
{
printf("%d ", i+j*n - j*(j+1)/2 );
}
printf("\n");
}
return 0;
}
出力:
0
1 4
2 5 7
3 6 8 9
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加