-4

3のようにユーザーから1つの数字を与えてから、ユーザーから3つの数字を与えたい

このような :

    int n;
    printf("insert one number");
    scanf("%d", n);

    int a;
    for(int i = 1; i <=n; i++){
          scanf("%d", a);
    }

配列を使用せずにこれを計算します...配列の使用が禁止されていることは非常に重要です

Σa[i]a[j] (i≠j)

入力例:

3 1 2 3

これを計算する

1x2 + 1x3 + 2x1 + 2x3 + 3x1 + 3x2

そして出力22

英語が下手でごめんなさい、誰か助けてくれませんか?

4

2 に答える 2

2

実際に答えを出すことなく、これに答えようとします:

入力の最初の数は、読み込む値の数であるため、それを個別に保存し、それを使用してループを作成する必要があります。

ループ (入力例を使用) は、次の計算を行う必要があります。

(1*2 + 1*3) + (2*1 + 2*3) + (3*1 + 3*2)

これは、 memo1288 がほのめかしていたもの、つまり数学コンポーネントを理解することにつながります。

于 2013-10-25T18:14:28.917 に答える
1

計算してみましょう。あなたが与えた例に基づく完全な形式の元の式は次のとおりです。

f(a, n) = Σa[i]a[j] (i < n, j < n, j ≠ i)

= Σa[i] (i < n) Σa[j] (j < n, j ≠ i)

n を n+1 に置き換えると、次のようになります。

f(a, n+1) = Σa[i] (i < n+1) Σa[j] (j < n + 1, j ≠ i)

= Σa[i] (i < n) Σa[j] (j < n + 1、j ≠ i) + a[n] Σa[j] (j < n + 1、j ≠ n)

= Σa[i] (i < n) Σa[j] (j < n + 1, j ≠ i) + a[n] Σa[j] (j < n)

= Σa[j] (j < n + 1) Σa[i] (i < n、j ≠ i) + a[n] Σa[j] (j < n)

= Σa[j] (j < n) Σa[i] (i < n、j ≠ i) + a[n] Σa[j] (j < n) + a[n] Σa[j] (j < n )

= f(a, n) + 2a[n] Σa[i] (i < n)

つまり、n 個の数値の計算値は、n-1 個の数値の計算値に 2 * n 番目の数値に前の数値の合計を掛けた値に等しくなります。

配列を使用せずにこれを行う方法は非常に簡単にわかるはずです。数値の現在の合計と計算の現在の値を追跡する必要があるだけです。

これは明らかに宿題の質問なので、実際のコードを書いてもらいますが、始めるには十分な情報です。

于 2013-10-25T18:13:11.743 に答える