• 締切済み

javaのプログラム

Josephusの問題で、「人数」と「取り除かれる人を決める数字」 を入力させ、配列による人数分の人のリストを作り、取り除かれる人を決める数字によって、順次人を取りのぞき、最後に残る人を表示させるプログラムを作ろうとしていますが、全くわかりません。 なにか中心となるようなものや、ヒント、例示、何でもよいので教えてください、お願いします。

みんなの回答

  • ssr-y6
  • ベストアンサー率71% (5/7)
回答No.3

 まず、指定された人数の人に円になってもらい全員に手を上げてもらう。 手を上げている人のうちで決められた番目の人毎に手を下ろしてもらい、 最後まで手を上げている人は何番目の人かを見つけ出す。  以下は、この方法でjosephusの問題を解くサンプルです。 public class josephus { public static void main(String args[]) { int n = 10, c = 2, k, i, j; try { n = Integer.parseInt(args[0]); c = Integer.parseInt(args[1]); } catch (Exception e) { System.out.println(e.toString()); }; boolean p[] = new boolean[n]; for (i = 0; i < n; i ++) p[i] = true; for (i = 0, k = 0; i < n - 1; i ++) { for (j = 0;;) { if (p[k]) { j ++; if (j >= c) break; }; if ((++ k) >= n) k = 0; }; p[k] = false; }; for (i = 0; i < n; i ++) if (p[i]) break; System.out.println("J(" + Integer.toString(n) + "," + Integer.toString(c) + ")=" + Integer.toString(i + 1)); }; }

全文を見る
すると、全ての回答が全文表示されます。
回答No.2

質問の意図が良くわからないのですが、 人数を入力した時点で、人数分の多次元配列を作成し、 その後削除する人を指定することで、 配列から削除しようということでしょうか? これは配列を使用しなければいけない課題?なのでしょうか? そうでなければパフォーマンスは落ちますが、Vectorを使うのが良いのではないかと思います。(参考URLを参照してみて下さい) もし配列で実現させるのであれば、 削除する人が指定された時点で、配列をつくり直すとか… 削除する人のインデックスをリストに入れて、 表示する時にそのインデックスの時は表示しないようなループを作成するとか…。 やり方はいろいろあると思いますが、 参考にしてみて下さい。

参考URL:
http://www.nextindex.net/java/collection/Vector.html
全文を見る
すると、全ての回答が全文表示されます。
回答No.1

与件が良くわかりませんが・・・ 取り除かれる人を決める数字ってのは、Random()かなんかで発生させるんだろうなぁと思います。 あとは、配列による人のリストをどう実現するかを考えて、Random()で発生させた値にあたる、リストの要素を削除していき、最後に残った要素が、求める値になる、って感じでしょうか。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • javaで数独を解くプログラムについて

    java初心者です。 学校で数独を解けという問題が出て、問題の意味もまったくわからないのでヒントください。 問題 数独を解くプログラムを作成せよ。ただし、すでに埋まっているマスを入力する時にはi,j,n(改行)でひとつの数字を入力できるものとし、終了条件は、0,0,0を入力するとする。 問題用紙には1問だけ数独が載ってあるのですが、 初歩的な質問で申し訳ありませんが まずこのプログラムは、その1問だけ載っているマスが少し埋まっているプログラムを打ち込んでから解くプログラムを考えるのでしょうか? 普通、数独を解くプログラムとは、空いているマスにキーボード入力して、解くのでしょうか?それとも自動に動いて解くのでしょうか? はじめにプログラムをコンパイルしたときにどう言葉が出るようにすればようのでしょうか? 終了条件0,0,0とは、000を入力したら終わる?ということでしょうか? マスを作って、クリックすると数字が…というようなjavaは習ってなくコマンドプロントでコンパイルだけなので、数字を打って入力、エンターというだけで解くのだと思うのですが、まったくわからないです。 根本的にわからなくてすいません。 ぜひご回答よろしくおねがいします。

  • プログラムの課題で分からない問題があるので、ヒントを教えていただきたい

    プログラムの課題で分からない問題があるので、ヒントを教えていただきたいです。 ちなみにfor文、if文、配列などを応用して(勿論ぜんぶ使わなくても良いです)プログラムをつくるものなのですが、配列をうまく理解してないので、どういう風に配列に代入して出力するかアドバイスお願いします。 ・1~5の数字をキーボードから入力し、それに対応した英語を表示。ただし単語は配列に初期化しておくこと(※swich-caseを使わずに) ・キーボードから英語の大文字を1文字入力して、その文字がアルファベットの何文字目にあたるかを表示する ・キーボードからアルファベットの小文字を1文字入力→大文字に変換して表示する 多くてすみません。

  • javaプログラミングについて

    ただいま問題で練習しているのですが、 3×3の二次元配列の中にバラバラに1~9の数字を配置しているのですが、 そのなかで特定の数字のみ、たとえば1を見つけ出しその配列の数字つまり1を0に入れ替えたいのです。色々やってみたり調べてみたりしているのですがいまいち出てこず・・・。 例や、ヒントなどいただければ幸いです。

  • javaプログラミング

    ただいまjavaで3×3のビンゴの制作で練習しております。 ビンゴカードの数字、ビンゴのボール?の数字を1~9で制作しました。 まず、一つの配列に1~9の数字をランダムで配置し、そしてそれを3×3の二次元配列で配置し、そしてさらにもう一つの配列にビンゴボールの番号をランダムで配置し、照らし合わせていくというプログラムを作りました。 3×3の数字で、出てきたボールの数字と対応した、二次元配列にある数字を0に変更(入れ替え)というところまで、できました。そこで最後にビンゴかどうかの判定をするところで詰まってしまいまして、縦、横、ななめいづれかに0が並ぶとビンゴ達成なのですが、ビンゴの判定方法のソースコードがわかりません。for文で回してみたりif文でやってみたりしたのですがどれもダメでした。一例や、ヒントなど。回答よろしくお願いします。 色々調べてみたのですが、自分のように全部配列に入れて動かしているソースが見つからず質問させていただきました。

  • Visual C++ 2005 のプログラムについて

    今回課題としてC++のプログラムを作れというものを突然出されて、C++をほとんど知らないので戸惑っています。 ○数字の、1を入力するとE、2ならD、3ならC、4ならB、5ならA、を表示するプログラムをswitch文を使ってつくりなさい。 ○九九の表を表示するプログラムを作りなさい。配列を使用して作りなさい。 というものです。Visual C++ 2005を使っています。いろんなサイトを見て自分なりにやってみましたが、どうしてもうまくいきません。どういったプログラムになるのか教えてください。よろしくお願いします。

  • 3つほどプログラムをおしえてください。

    (1)100までの整数をいくつか入力し、10刻みでの個数を表示し、負の数が入力されると整数の入力を終わるプログラムです。各範囲の個数は配列に格納する。 実行結果 65 30 21 95 5 -1 0--- 9 : 1 10--- 19 : 0 20--- 29 : 1 30--- 39 : 1 40--- 49 : 0 50--- 59 : 0 60--- 69 : 1 70--- 79 : 0 80--- 89 : 0 90---100 : 1 (2)数字の文字列を入力し、その文字列に含まれる各数字(文字)'0','1',~'9'の個数を表示するプログラムの作成。 実行結果 1231234567 0: 0 1: 2 2: 2 3: 2 4: 1 5: 1 6: 1 7: 1 8: 0 9: 0 (3) 変数xは、0~1までの0.01刻みの値(101個)を取るとする。このとき、2次関数 f(x)=3x^2+2x+1の値が2.0<f(x)<3.0となるxの値をの個数を求めるプログラムの作成。ただし、xを引数としf(x)の値を返す関数を作成して、それを使用する。 実行結果 number=21 やってるうちにわけがわからなくなってしまいます。どなたかよろしくおねがいします。

  • このプログラムについて

    1 11 111 1111  111   11    1   上記のように数字を(平行四辺形に)表示するforを使用した javaプログラムを作りたいのですが、 ずっと考えているのですがどのようにして組むのかさっぱりわかりません ヒントでもいいですので教えてください!

    • ベストアンサー
    • Java
  • JAVAについて(配列)

    現在JAVAの配列を勉強しています^^ 問題集の勉強をしてて、気になる事があったので、どなたかわかる方宜しくお願いします☆ 要素数11個の配列があります。 10個には同じ数字が入っています。 1個だけ他の数字より大きい数字が入っています。 ただし、配列の何番目に、その数字が入っているのかは解りません。 それが、配列の何番目に入っているのかを出力するプログラムを作成してください。 ※for 文使用しないパターン ヒント: ここに天秤と、 11個の重りがあります。 1つだけ他のより重いです。 他はみんな、同じ重さです。 (2分木) 私が考えるには、全体の平均値を比較していく考えなのですが、他によい方法があれば宜しくお願い致します。 ちなみに今作成途中のもの↓ 実行しても表示されません・・・なぜかわかりません・・・ わかる方・・・助けて下さい^^ public static void main(String[] args) { int[]a = new int[11]; a[0] =1; a[1] =1; a[2] =1; a[3] =1; a[4] =2; a[5] =1; a[6] =1; a[7] =1; a[8] =1; a[9] =1; a[10] =1; int max = a[0]; int sum = a[0]+a[1]+a[2]+a[3]+a[4]+a[5]+a[6]+a[7]+a[8]+a[9]+a[10]; int avg = sum/11; if(avg<a[0]) System.out.println("最大値は"+max+"番目"); } }

  • 正の正数値を読み込み、0が入力されたらそれらの整数を小さい順に表示するプログラム

    ヒントは「まず数字を読み込んだらすでに記憶している最後の要素から先頭に向かって大小の比較を行なう。 読み込んだ数字の方が小さかったら既に記憶されている配列の要素を一つ後ろにずらし(ここがよくわかりません)配列の一つ前の要素と比較を行なう。(何と比較するのかわかりません) 読み込んだ数字の方が大きかったら、終了処理をし、次の数字を読み込む。」 です。 何から手をつけていいのかわからないんで、他のヒントとか頂けたらうれしいです。 よろしくおねがいします。

  • Javaのプログラムをルビー言語に。

    10~50までの素数が格納されている配列を rubyで作りたいのですが、どのようにすればいいいのかよくわかりません。 下のプログラムにも間違いがあるかもしれませんので もしありましたご指摘お願い致します。 for i=start i<=end i++; //iは割られる数 for(j=1;j<=i;j++){ //jは割る数 if(i%j==0){ count++; } } if(count==2){ System.out.println(i); } iをjで割っていき、余りが0になったらカウントを増やしていくプログラムです。 素数は1とその数字でしか割れないので、カウントは2になり、 それを配列に格納したいのですが、ここではただ表示するだけに留まってしまっています。 どなたかよろしくお願い致します。

このQ&Aのポイント
  • エアープリント EW-M5071FTはiPadから印刷することができるのか、調べてみました。
  • 無線LAN設定はしているがワイハイダイレクト設定がうまくいかず、印刷ができない問題があるようです。
  • EPSON社製品に関する質問ですので、EPSONのサポートに問い合わせると解決策が見つかるかもしれません。
回答を見る