「みんな教えて! 選手権!!」開催のお知らせ

Javaで南京錠のプログラムを作成する方法を教えてください。

1 プログラムの仕様
(1)電子南京錠の仕様
入力された番号の中に、正しい番号が連続した正しい順番で含まれていれば開錠することができる。

(2)電子南京錠を開錠するための正しい番号LiがN個、やけくそで入力した番号IiがM個の時、M個のIiのなかに、N個のLiが同じ順番で含まれていた場合はunlock、含まれていない場合はlockと出力。

(3)もし、L のkey値の桁数(つまりn)より、I のkey 値の桁数(つまりm)が小さければ、同じ値が存在するはずがないので「lock」ということになる。

2.プログラムの説明

<桁数の条件を満たしている場合>
(例)Lのkey値が「3572」の値で、Iのkey値が「43633572」の値だったとする

① 3、5、7、2         ※先頭から一致しない
   ↕
  4、3、6、3、3、5、7、2、9

②  4、5、7、2          ※先頭は一致するが、2文字目が一致しない
   ↕  ↕
4、3、6、3、3、5、7、2、9

③   3、5、7、2        ※先頭から一致しない
     ↕
4、3、6、3、3、5、7、2、9

④     3、5、7、2      ※先頭は一致するが、2文字目が一致しない
       ↕
4、3、6、3、3、5、7、2、9

⑤       3、5、7、2    ※4文字全てが一致する。よって「unlock 」となる。
        ↕  ↕ ↕  ↕
4、3、6、3、3、5、7、2、9


<上記の動き>
① Iのkey 値の先頭から順に、Lのkey値が一致するかを調べている。

② もし、1文字目から違っていたら、Iの位置を1つずらして、またLの先頭文字と一致するか調べる。

③ もし、1文字目が一致していたら、2文字目、3文字目と順に一致するかを調べていく。

④ Lのkey値の最後まで全て一致していたら「unlock」

⑤ 途中で文字が違っていたら、Iの位置を1つずらして、またL の先頭文字と一致するかを調べていく。

⑥ これを繰り返し、Lのkey 値と全て一致するものが見つからなかったら「lock」となる。

3.作成方法
① nとmの桁数のチェックをする。
  nの桁数が大きいときは必ず「lock 」となる。
  桁数条件を満たしている場合は基準で動くのはIのkey 値(配列)

② I の配列の先頭から順に、最後のL の文字が取れるまで(Lの文字数分が取れないと×)1文字ずつ繰り返します。(for でもwhile でもOK)・・・ループ①

③ L の配列の繰り返しを行います。これはwhileで行うのが良い。・・・ループ②
  L の文字数分繰り返せば良いが、L とI の配列の内容が異なった時点で繰り返しを終了した
いから。つまり条件は2つになる。
④ 繰り返しの中では、L とI の配列の添字をそれぞれカウントアップさせれば良い。
※ if 文を書く必要はありません。while の条件で抜け出てきますから。

⑤ 繰り返しを終了した時点で、L の添字と文字数が一致していれば全て一致していたと分かる。

A.全て一致の場合
何かしら印になる変数に印の値を入れて、ループを抜けて良い。
※ ループを抜けるための命令がある。

B.一致していない場合
途中で繰り返しを出てきたことになるので、それぞれLとIの2つの添字を次の処理のために設定し直す。
※ Lの添字は先頭に戻す。
※ Iの添字は、ループ①のカウントの次に合わせる。(for文の場合は自動的に次になります。)

★ 添字は全部で3つ必要
Ⅰ ループ①用の添字
Ⅱ Lの配列の添字
Ⅲ I の配列の途中から文字を調べるための添字

⑥ 全てのループ処理を終えたら、一致の有無のための印の値を判定して、「unlock」か「lock」を出力する。

4.入力値
N (電子南京錠を開錠するための番号の個数)
L_1 L_2 L_3 ... L_N (電子南京錠を開錠するための番号)
M (やけくそで入力された番号の個数)
I_1 I_2 I_3 ... I_M (やけくそで入力された番号)

5.出力値
M個のIiのなかに、N個のLiが同じ順番で含まれていた場合はunlock、含まれていない場合はlockと出力

A 回答 (2件)

System.out.println("43633572".contains("3572")? "unlock": "lock");



参考)
https://docs.oracle.com/javase/jp/17/docs/api/ja …
    • good
    • 0

どういうアルゴリズムでその処理ができるかを考えて, それをプログラミング言語 (今の場合なら Java) で記述する.

    • good
    • 1

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


おすすめ情報