• 締切済み

配列の和

次の、総当りのようなことをしたいのですができません。 例: 配列をtestとして、testの要素数が3で、加算する回数をnとしたとき (n=3) sum=test[0] + test[0] + test[0] sum=test[0] + test[0] + test[1] sum=test[0] + test[0] + test[2] sum=test[0] + test[1] + test[0] sum=test[0] + test[1] + test[1] sum=test[0] + test[1] + test[2] sum=test[0] + test[2] + test[0] sum=test[0] + test[2] + test[1] sum=test[0] + test[2] + test[2] ..... sum=test[2] + test[2] + test[2] ちなみにn≠0です。 nが固定ならできそうなのですが、固定ではないので困っています。 ソースコードまたは考え方を教えてください。

  • Java
  • 回答数2
  • ありがとう数0

みんなの回答

  • nag0720
  • ベストアンサー率58% (1093/1860)
回答No.2

0~(3のn乗-1) の数をn桁の3進数で表し、各桁の数を配列の要素として可算する。

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.1

ふつ~は再帰

関連するQ&A

  • 多次元配列について質問

    以下は、Javaの参考書に掲載されていたある問題です。 その問題文と解答ソースコードを記載しますので、以下の疑問点に答えていただければ幸いです。 また、僭越ながらお願いがあるのですが、このソースコードを一度実行してから私の質問を見たほうが、より私の疑問点が回答者様にわかると思うので、実行してくだされば幸いです。 問題文:次のA~Cの手順に従ってプログラムを作成しなさい。 A:5×4の2次元配列のint型配列pを作成します。つまり、pは5個の要素を持ち、各要素が「4つの要素を持つintの配列」であるような配列です。 B:次にpの全要素にMath.random()で得られる乱数値を代入しなさい。乱数値は0から10の範囲になるように10倍し、さらにintにキャストして配列の要素に代入しなさい。 C:pの全ての要素を例示のように表示しなさい。(※ここでいう「例示」とは、私がこの質問板にupした画像のこと)ただし、pの各要素を5×4の表と見た時、各列の(縦方向の並び)の合計を、その5×4の表と見た時、各列(縦方向の並び)の合計も例示のように表示しなさい。 ---解答ソースコード(クラス宣言は除きます)--- public static void main(String[]arg){ //A int[][]p=new int[5][4]; //B for(int i=0;i<p.length;i++){ for(int j=0;j<p[i].length;j++){ p[i][j]=(int)(Math.random()*10); } } for(int[]n:p){ for(int m:n){ System.out.print(m+"\t"); } System.out.println();//改行 } //C int[]sum=new int[p[0].length]; for(int[]n:p){ for(int j=0;j<n.length;j++){ sum[j]+=n[j]; } } System.out.println(); for(int m:sum){ System.out.print(m+"\t"); } } 疑問点:Cの手順の解答について疑問なのですが、以下のソースコードで何故各列の合計を求められるかわかりません。何故ですか?凄く頭が引きちぎれるほど考えたのですがわかりませんでした。 int[]sum=new int[p[0].length]; for(int[]n:p){ for(int j=0;j<n.length;j++){ sum[j]+=n[j]; } } だって、例えば拡張for文でpの0番目の要素を取り出して、さらにfor文でその0番目の要素の0番目、1番目、2番目、3番目をsumに累計するといったように、縦方向でなく「横方向」に合計するソースコードに僕は思えるんですよ。何故縦方向に合計できるんですか?たしかに実行すると縦方向に合計されてるので、縦方向に合計するものには間違いなのだけれど、、

    • ベストアンサー
    • Java
  • 無名配列の作成方法について質問

    以下はJavaの参考書の問題集に掲載されていた、無名配列を作成するソースコードです。 この書き方について疑問があるので、質問させて頂きます。 int[][]n=new int[2][]; n[0]=new int[3]; このn[0]=new int[3];が、無名配列を使って要素に値を設定していると解説に書かれていました。 しかし、この参考書では、別のページで無名配列の作成方法として、int[]n; n=new int[]{1,2,5};のように、要素リストを代入する書き方が、無名配列の例として 紹介されていました。。 質問1:何故、n[0]=new int[3];の書き方も無名配列なのですか? 質問2:そもそも「無名配列」とは何ですか?参考書にもネットで調べても その解説がほとんど無かったので、、、

    • ベストアンサー
    • Java
  • 多次元配列について質問

    以下は、Javaの参考書に掲載されていたある問題です。 その問題文と解答ソースコードを記載しますので、以下の疑問点に答えていただければ幸いです。 また、僭越ながらお願いがあるのですが、このソースコードを一度実行してから私の質問を見たほうが、より私の疑問点が回答者様にわかると思うので、実行してくだされば幸いです。 問題文:次のA~Cの手順に従ってプログラムを作成しなさい。 A:5×4の2次元配列のint型配列pを作成します。つまり、pは5個の要素を持ち、各要素が「4つの要素を持つintの配列」であるような配列です。 B:次にpの全要素にMath.random()で得られる乱数値を代入しなさい。乱数値は0から10の範囲になるように10倍し、さらにintにキャストして配列の要素に代入しなさい。 C:pの全ての要素を例示のように表示しなさい。(※ここでいう「例示」とは、私がこの質問板にupした画像のこと)ただし、pの各要素を5×4の表と見た時、各列の(縦方向の並び)の合計を、その5×4の表と見た時、各列(縦方向の並び)の合計も例示のように表示しなさい。 ---解答ソースコード(クラス宣言は除きます)--- public static void main(String[]arg){ //A int[][]p=new int[5][4]; //B for(int i=0;i<p.length;i++){ for(int j=0;j<p[i].length;j++){ p[i][j]=(int)(Math.random()*10); } } for(int[]n:p){ for(int m:n){ System.out.print(m+"\t"); } System.out.println();//改行 } //C int[]sum=new int[p[0].length]; for(int[]n:p){ for(int j=0;j<n.length;j++){ sum[j]+=n[j]; } } System.out.println(); for(int m:sum){ System.out.print(m+"\t"); } } 疑問点:Cの手順の解答について疑問なのですが、以下のソースコードで何故各列の合計を求められるかわかりませんでした。しかし、前回ここで質問した際に※解答していただいた方のご教示もあり、疑問点が解決したと思います。その各列の合計が求められる理由は、以下の見解で正しいですか? int[]sum=new int[p[0].length]; for(int[]n:p){ for(int j=0;j<n.length;j++){ sum[j]+=n[j]; } } 例えば、外側の拡張for文が1回目のループに突入し且つ内側のfor文のループ制御変数jが0である場合、sum[0]にn[0](=p[0][0])が代入され、外側の拡張for文が2回目のループに突入し且つjが0である場合、sum[0]にn[0](=p[1][0])が再代入されるので、縦方向に累計されていくということでしょうか? ※ http://okwave.jp/qa/q6993760.html

    • ベストアンサー
    • Java
  • 配列にポインタを入れたい

    C言語のプログラム作成で全然分からなくて非常に困っています。 そのため教えていただきたく思います。 目的は、 文字列 str="aaa\nbbb\nccc\n" を \n で区切って配列に入れたいです。 文字列は不定長さで str="aa\n" や str="aaa\nbb\nc\nddd\neee\n" などです。 必ず\nで区切られています。 それらを配列に入れて hairetu[0] = "aaa\n" hairetu[1] = "bbb\n" hairetu[2] = "ccc\n" ・・・ という結果を得たいです。 自分でまったく分からないところは、 配列の要素にアドレスを入れること、 文字列strの長さが固定でないため配列の要素をどのように増やすか、 です。 どなたか助けていただけないでしょうか。 直接回答を教えていただけたらすごく助かります。 参考のページや考え方を教えていただいてもありがたいです。 よろしくお願いします。

  • 要らない配列を無くしたい。Perl

    要素のない配列を消したいです。 do\n be\n usual\n become\n get\n look\n watch\n このような複数行の文があり"a"が入っている行だけ配列に突っ込みたいと思っています。 自分が試した方法として。 @line = split(/\n/,$content); とりあえず改行で区切り配列にぶち込んでいき。 foreach $line (@line){       unless ($line =~/a/){       $line = undef; } } その次に"a"が入っている以外の配列にundefを入れるようにしていました。 しかしこれだとundefが入っている配列がたくさん出来てしまい納得がいきません。 要素のない配列を消したいです。 どなたかご教授お願いします。

    • ベストアンサー
    • Perl
  • 多次元配列

    たとえば  int test[]={1,2,3}; のような場合は、配列の要素数を省略できます。 しかし、多次元配列の場合は左端の添え字しか省略できないのはなざでしょうか? 例  int test[][3]={{1,2,3},{4,5,6},{7,8,9}}; 全部省略できない理由がわかりません。 どなたか教えてれませんか?

  • 【PHP】配列を連想配列に

    $m = array('a', 'b', 'c'); この配列 $m をもとに $n = array(  'a' => array(   'b' => array(    'c' => array()))); 上のような連想配列 $n をつくりたいのですが、 $n = array(  $m[0] => array(   $m[1] => array(    $m[2] => array()))); 要素の数が固定のときは、これでもいいのですが、数が変動する場合に対応できません。 何か方法があれば教えてください。

    • ベストアンサー
    • PHP
  • C++で等差数列の和に関する問題をご教授ください

    #include<iostream> using namespace std; double sum(double n) { return (1/2)*n*(1+n); } int main() { double n; cin>>n; cout<<"1から最後までの和は"<<sum(n)<<endl; } ソースコードは以上ですが,for文使わずに1から公差が1である数列のn番目までの和を求めたいです。  以上のソースでコンパイルはできますが,実行してみると,和はすべて0になります, double型にしているので, 整数の問題ではないと思いますけど,どうなんでしょうか? よろしくお願いします。

  • 配列について

    配列の要素数をinteger型にいれたいのですがどうしたらいいですか? 例   Dim A() As String   Dim B AS Integer       A = "あ","い","う" Aの要素数3をBに入れたいのです。 この配列の作りかたもあっているか分かりませんがよろしくお願いします。

  • 配列の問題

    配列の問題です。 n個の要素を持つ一次元配列の値(変数値)をまったく逆に入れ替えるプログラムを作りたいのですが、この場合どのようにして逆を表現すればよいのかわかりません。 (nの値は読み込み、配列は奇数個でも偶数個でも使えるプログラムでなければなりません) 参考書を見ながら作ってみたのですが…だめでした。 プログラム初心者です。アドバイスお願いします。 int main(void) { int i,n; int vc[n]; printf("n個の要素を持つ一次元配列をつくる\n"); printf("nの値を入力してください\n"); scanf("%d",&n); for (i=0;i<n+1;i++) vc[i]=i+1; for (i=0;i<5;i++) printf("vc[%d]=%d\n",i,vc[i]); printf("この配列を逆に入れ替えると\n); return 0; }

専門家に質問してみよう