2013-10-25 45 views
-4

我想給一個號碼從用戶等3, 然後從用戶計算不使用陣列

這樣得到3號:

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

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

並且不使用陣列計算此.. 。 這是非常重要的,使用數組是禁

ΣA[I]一[j]的(I≠j)的

輸入例如:

計算此

1×2 + 1×3 + 2×1 + 2×3 + 3×1 + 3×2的

和輸出22

抱歉對於我的英語不好,誰能幫助我?

+0

這看起來像一個解決方案請求。先寫一些代碼:) – Ashalynd

+0

你必須將輸入值存儲在某處......因爲它現在是你每次都覆蓋'a'(除了bug) – mocj

+0

是否允許指針+'malloc'? (因爲它們(在C中)與數組不同......) – Kninnug

回答

2

我要試圖回答這個實際上不給你答案:

由於您輸入的第一個數字是你想讀的值的數量,你需要存儲單獨和使用它創建一個循環。

你的循環(使用例如輸入),就需要計算:

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

它把它歸結爲memo1288所暗指的是:找出數學組件。

1

讓我們來做一些數學。基於您給出的示例,完整形式的原始表達式是:

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

=ΣA[I](I < N)ΣA[j]的(j <ñ,J≠I)

當我們有n + 1代替n我們得到:

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 <ñ,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個數字乘以所有前面的數字的總和。

它應該很容易看到如何不使用數組。您只需要跟蹤數字的運行總和以及計算的運行值。

我會讓你寫出實際的代碼,因爲這顯然是一個家庭作業問題,但這應該是大量的信息讓你開始。

+0

關閉。他原來的帖子說'我!= j',而不是'i

+1

@ZacHowland你是對的; fix'd。你會注意到結果只是以前的兩倍,這應該是直觀明顯的(因爲對於任何i和j,i≠j,總和將包括[i] a [j]和[j] a [一世]) –