• ベストアンサー

このような配列の場合の計算法はどうすればいいのですか?

プログラミング言語(C言語、JavaScript、PHP)を勉強し始めたのですが、以下のような場合の計算法がわかりません。 もう2日悩んでいます…。 ■配列の中身が、3つあるとします。たとえば、array(10,20,30)とします。 このとき  printf((10*20) + (20*30) + (30*10)); という計算式の結果を求めたいです。 ■配列の中身が、4つあるとします。たとえば、array(10,20,30,40)とします。 このとき  printf((10*20*30) + (10*20*40) + (10*30*40) + (20*30*40)); という計算式の結果を求めたいです。 ■配列の中身が、5つあるとします。たとえば、array(10,20,30,40,50)とします。 このとき  printf((10*20*30*40) + (10*20*40*50) + (10*20*30*50) + (10*30*40*50) + (20*30*40*50)); という計算式の結果を求めたいです…(何度もすみません)。 上記のように配列の中身の個数と値が未確定の場合はどのようなコードで計算させればよいのでしょうか?配列の個数は1~10個を想定しております。 C言語、JavaScript、PHPのどの方法でもアプローチ法は同じだと思うので、いずれかの言語でかまいませんのでアドバイス頂ければと思います。よろしくお願いします。

  • suffre
  • お礼率76% (2013/2633)

質問者が選んだベストアンサー

  • ベストアンサー
  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.4

arrayの中に0がない場合は簡単にこんな感じで・・・ <?PHP $array=Array(10,20,30,40,50); $multi=1; foreach($array as $val) $multi*=$val; //すべての要素を掛け算する $sum=0; foreach($array as $val) $sum+=$multi/$val;//全てを掛けた数値からそれぞれを割ったものを合計する print $sum; ?>

suffre
質問者

お礼

ありがとうございます! バッチリ動作しました!なかなかうまい方法がわからず、悩んでおりましたが たいへん助かりました。これで今日はかなり勉強が進みそうです。 みなさまどうもありがとうございましたm(_ _)m

その他の回答 (3)

  • koko_u_
  • ベストアンサー率18% (459/2509)
回答No.3

>上記のように配列の中身の個数と値が未確定の場合は これは実行時まで配列の個数が未定、実行する毎に配列の個数が 5個であったり 7個であったりするということですかね? javascript や PHP は知らんのでパスして、例えば C 言語なら int main(int argc, char* argv[]) {...} の argc に コマンドライン引数の個数が格納されるので C:\> calculate.exe 10 20 30 40 50 のようなユーザーインターフェイスで作るのが最も簡単です。 もちょっと「どんな使い方を想定しているか」を補足すると適切なアドバイスが得られますよ。

suffre
質問者

お礼

ありがとうございます! そのような個数の出し方もあるのですね。 現在格闘中ですが、なんとなくできてまいりました。

  • k-pix
  • ベストアンサー率51% (50/98)
回答No.2

読みにくいので注釈。 コードの5行目の条件式は、 j != i です。

suffre
質問者

お礼

わざわざありがとうございます。

  • k-pix
  • ベストアンサー率51% (50/98)
回答No.1

配列の要素数を n として、 sum = 0; for (i=0; i<n; i++) { product = 1; for (j=0; j<n; j++) { if (j!=i) product *= array[j]; } sum += product; } のようなカンジでいかがでしょう? 結果は、sum です。

suffre
質問者

お礼

ありがとうございます! うまくいきました。非常に短いコードで可能なのですね。 とても勉強になります。

関連するQ&A

  • 多次元配列

    初歩的な質問ですみません。 PHPプログラミングでの質問です。 仮に、多次元配列Aに、 Array( [0] => Array ( [0] => 6 ) [1] => Array ( [0] => 2 [1] => 1 ) [2] => Array ( [0] => 0 [1] => 5 [2] => 4 ) ) 多次元配列Bに、 Array( [0] => Array ( [0] => りんご ) [1] => Array ( [0] => ぶどう [1] => パイナップル ) [2] => Array ( [0] => みかん [1] => すいか [2] => メロン ) ) のように値が入っている場合、配列Aの値を参照して 値の大きいものから順に、それに対応する配列Bの値を取り出し、 あたらしい配列Cに代入する処理の書き方を教えて下さい。 上記の例ですと、配列Cが、 Array ( [0] => りんご [1] => すいか [2] => メロン [3] => ぶどう [4] => パイナップル [5] => みかん ) となるようにしたいです。 よろしくお願いします。 長文失礼しました。

    • ベストアンサー
    • PHP
  • JavaScriptで2次元配列を扱う方法

    C言語を少しだけやっていました。 JavaScriptで2次元配列作りたいのですが、上手くいきません。 var array[5][5]; array[0][0] = 21; document.write(array[0][0]); ↑を実行しても「21」と表示されません。 new array()とか色々試しましたが上手くいかないので質問させていただきました。 教えてください!

  • PHPの配列をjavascriptへ渡したい

    PHPの配列をjavascriptの配列に渡したいのですがやり方がわかりません。 変数の渡し方ならわかるのですが配列はどう渡せばいいのでしょうか? for文を使って渡せばいいと思うんですがどうやればいいか分かりません。 <?php $filedata=file("data.txt");//javascriptに渡したい配列 ?> <script language="javascript"> var a=new Array();//PHPの配列をこの配列に入れたい </script> 何方か教えてください。

    • ベストアンサー
    • PHP
  • 配列について

    プログラミング言語一般の配列について思うことがあるのですが、 仮にJavaScriptで話を進めます。 (JavaScriptの配列は、正確には連想配列としての実装で、 インデックスに数字を使用するときは自動的に文字列に 置き換えられるそうですが、その辺の話は無視させてください。) 本やネットなどで配列に関する説明を見ると、 「var a=new Array(3);で、a[0],a[1],a[2]の3つの配列要素が確保される」などとあり、 図解なんかでは、一つ目の箱にa[0]、2つ目の箱にa[1]などと 書かれていて、普通の変数の場合と同様に、あたかもa[0]やa[1]が個々の要素の名前のように解説してある場合が多いのですが、 どうもこれって違うんじゃないのかって気がしてしょうがないです。 配列の1番目の要素にアクセスする手段として、a[0]と記述するのであって、 a[0]そのものが個々の要素の名前ではないですよね。 名前だとしたら、a[0]は文字列でなくてはいけないと思うのですが、 みなさんはどう思われますか? まぁ、実際プログラミングする際にはどうでもいいような話かも知れませんが(^^; よろしくお願いします。

  • php 配列の並べ替え

    言語はphpなのですが以下のような配列があるとします。 $array = array( 1, 2, 3, 4, 5, 6, ... ); 上記を下記のような配列にしたいです。 $array2 = array( array( 1, 5, 9 ), array( 2, 6, 10 ), array( 3, 7, 11 ), array( 4, 8, 12 ) ); また、以下のように値が増減する可能性もあります。 $array2 = array( array( 1, 5, 9 ), array( 2, 6, 10 ), array( 3, 7 ), array( 4, 8 ) ); ご教授ください。

    • ベストアンサー
    • PHP
  • mysqlを配列でjavascriptにinputする

    今、大学の研究で多言語チャットをphp、javascript、mysqlで作っているのですが、mysqlに入っているデータをどのようにしてjavascriptに配列で読み込ませるのかわかりません。どんなことでもいいので教えてください。ちなみに、mysqlにはtable名:english中身はno:番号words:使う文章となっています。またphpによりmysqlリストはjavascriptに読み込めていると思います。 できたら、配列で格納した後に検索をしなければならないのでそれをわかる人はそのことについても書いてくれるとうれしいです。

  • 配列の使い方

    今C言語入門という本で勉強中です。 配列の基本という初歩の部分ですが、教科書通り以下のように記述しているのに、うまく動きません。 環境はMacのXcode ver5で、新しいプロジェクトにてOSXのApplicationのComand Line ToolにてC言語を選択しています。 #include <stdio.h> int main(int argc, const char * argv[]) { // insert code here... int array[5]; int i; int ans; for ( i = 0 ; i <5 ; i++){ printf("number : "); scanf(" %d\n" , &array[i]); } ans = 0; for( i=0; i<4; i++){ printf("%d + " , array[i]); ans += array[i]; } ans += array[4]; printf("%d = %d\n" , array[4] , ans); return 0; } コンソール結果 number : 1 2 number : 3 number : 4 number : 5 number : 6 1 + 2 + 3 + 4 + 5 = 15 Program ended with exit code: 0 数字を1,2,3,4,5,6の順番で入力しました。 おかしな点一つ目:2の入力の際「number:」が出力されない。 おかしな点二つ目:入力項目が一つ多い(array[4]まで、5までの入力のつもりだった)

  • VBからDLLへ多次元配列を渡す/配列の添え字

    C++で作ったdllにVBAから配列を渡して、計算結果を再びVBAに戻して、アウトプットはVBAで、ということをしています。(経験豊富な方への相談です。) 具体的には、渡したい配列の先頭アドレスをlong型で記憶し、そのlong型の配列を受け渡ししています。 ただ、ご存知の方が多いかもしれませんが、VBAとC++では配列の添え字の順序が逆になっており、非常に面倒です。どういうことかといいますと、 Dim array(0 to 4, 0 to 9) as long をdllに渡し、array(2,6)を参照したい場合、C++では(Cでの配列名をc_arrayとし、これに先頭アドレスを入れると)、 c_array[(4+1)*6 + 2 ]; としなければならないと思います。これをプリプロセッサで #define C_ARRAY(a,b) c_array[(4+1)*b + a] としたらVBでの配列の感覚で扱えますが、この擬似配列C_ARRAY(a,b)を関数に渡すときなどは結局同じ混乱が再び生じることになってしまいます。 これを、何らかの方法で、簡潔に解決することはできないものでしょうか? VBA(エクセルを念頭においています)のほうで配列の添え字の順序をC++のそれに沿うように変更できたりしたら非常にうれしいですが、無理でしょうか?

  • C言語の配列とポインタについて

    C言語の配列とポインタについてわからないことがあります。 以下のソース例は、10個の値の平均値を求めるプログラムです。 コメントを挟んだ部分が疑問点です。 【ソース例】 #include <stdio.h> int getaverage(int *data); int main(void) { int average,array[10] = {15,78,98,15,98,85,17,35,42,15}; average = getaverage(array); printf("%d\n",average); return 0; } int getaverage(int *data) { int i,average = 0; for (i = 0;i < 10;i++) { average += data[i]; /*ポインタ変数なのに? */ } return average / 10; } 【実行例】 49 このdata[i]はポインタ変数であり、 配列arrayの i 番目の要素であるarray[i]の"アドレス" が代入されているはずだと思うのですが、 なぜ通常の整数変数であるaverageと数値計算が出来、正しい結果が出たのでしょうか? あたかもdata[i]には、 array[i]の"アドレス"ではなく、 array[i]の"メモリの中身"が代入されているようです。 どういうことでしょうか? 回答よろしくお願いします。

  • 多次元配列のカウントのしかた

    すみません、質問させてください。 $array1:1次元配列 $array2:2次元配列 1次元配列のカウント(要素数)をしるには count($array1) とすれば取得することができますが、 2次元配列のカウントを取得するにはどのように すればいいのでしょうか?そんな関数はありますか? $array2のデータの中身 $array[0][0] = 'a'; $array[0][1] = 'b'; $array[1][0] = 'c'; $array[1][1] = 'd'; $array[2][0] = 'e'; $array[2][1] = 'f'; この場合、3という値が欲しいのですが・・・ 宜しくお願い致します。

    • ベストアンサー
    • PHP