1~13の数字が書かれたトランプカードがあります。
カードの数字が2の倍数の時は「Doubt」と出力し、3の倍数の時は「Doubt!!」と出力し2と3の倍数の時は「Doubt Doubt!!」と出力する。それら以外の時は1~13の数字を出力する。
・入力値
13 2
2 Doubt
3 Doubt!!
・出力値
正しい
1
Doubt
Doubt!!
Doubt
5
Doubt Doubt!!
7
Doubt
Doubt!!
Doubt
11
Doubt Doubt!!
13
私の出力値
1
Doubt 2
Doubt!!
Doubt 4
5
Doubt Doubt!!
7
Doubt 8
Doubt!!
Doubt 10
11
Doubt Doubt!!
13
java
1import java.util.*; 2 3public class Main { 4 public static void main(String[] args) { 5 Scanner sc = new Scanner(System.in); 6 7 int n = sc.nextInt();//カードの枚数 8 int m = sc.nextInt();//掛け声の回数 9 10 int[] shoutRule = new int[m];//掛け声の規則を表す整数 11 String[] shout = new String[m];//掛け声 12 13 for(int i=0; i<m; i++){ 14 shoutRule[i] = sc.nextInt(); 15 shout[i] = sc.next(); 16 } 17 18 for(int i=1; i<=n; i++){ 19 int count = 0; 20 for(int j=0; j<m; j++){ 21 if(i % shoutRule[j] == 0){//倍数の時 22 count++; 23 if(count <= m){ 24 System.out.print(shout[j]); 25 if(count < m){ 26 System.out.print(" "); 27 }else{ 28 System.out.println(); 29 } 30 } 31 }else{//倍数でない時 32 count++; 33 if(count == m){ 34 System.out.println(i); 35 } 36 } 37 } 38 } 39 } 40} 41
整数が2の倍数で3の倍数でない時に間違っている。そこを修正すると、2の倍数で2の倍数の時がおかしくなってしまいます。自分では条件式の書き方が悪いと思うのですが、どう書いたら良いのかわかりません。
それほど重要ではないことですが質問件名について、
> ある整数が、偶数の時と奇数の時とそれ以外の時の出力
3は奇数ですが、それの偶数倍は偶数なので、そのまま「ある整数が、2の倍数の時と3の倍数の時とそれ以外の時の出力」で良いのではないでしょうか。問題の内容的にはよくあるFizzBuzzですね。
多分、問題の意図を根本から取り間違えている。
二の倍数とは何でしょうか? 三の倍数とは何でしょうか?
具体的にさんの倍数を挙げていってください。算数が分かっていれば恐らく勘違いされていることがわかるはずです。
> 偶数の時と奇数の時とそれ以外の時
それ以外? 偶数でも奇数でもないってなんやねん?
@BeatStarさん
> 多分、問題の意図を根本から取り間違えている。
そこまでじゃないんじゃないでしょうか。質問本文中では2の倍数、3の倍数、とのように書かれていますし、提示のコードもそれを反映していそうです。私の指摘も質問件名に関することです。ただ、まぁ、2つの倍数、ここでは2と3が入力値で可変で指定できるようになっているところを見ると、必ずしも2の倍数、3の倍数とは限らないんじゃないかな、と言う感はあります。
回答ありがとうございます。「ある整数が、2の倍数の時と3の倍数の時とそれ以外の時の出力」が正しいですよね。変更できそうにないので、このままにします。
>必ずしも2の倍数、3の倍数とは限らないんじゃないかな、と言う感はあります。
その通りです。ここの数字は変化します。
>それ以外? 偶数でも奇数でもないってなんやねん?
ここで言いたかった事は、Doubtの時・Doubt!!の時・1から13の数字の時でした。
> 変更できそうにないので、このままにします。
質問本文のことですか? それなら編集が可能ですよ。
ケータイからでもできますし、PCからでもできます。
このteratailは質問者が問題解決するための場所ですが、ナレッジサービスとしての側面もあるので質問は編集してください。そもそも質問 = 前提となり、その前提が間違っているのならいくら丁寧な回答でも意味を成しません。「1 + 1 は何になるか?」という問いに対して「10の2乗は100です」と答えるようなものです。そもそも答えが合っていないので間違いとなる。
さらにナレッジサービスなので、似たようなケースでこのページに当たったとして納得できますか?
前提が間違っていれば意味を成しません。
人間関係ですらこれなのだから、機械を相手にするプログラミングなんて到底できるはずがありません。機械に人間の機微なんてわかりませんから。
質問者 Bafettoさん
本欄は「質問への追記・修正の依頼」欄なので、ご質問内容への指摘に留まります。
(まぁ確かに、本欄でほとんど回答、解答のようなことが投稿されることはありますが)
> 自分では条件式の書き方が悪いと思うのですが、どう書いたら良いのかわかりません。
違っていたら申し訳無く、反論していただいて欲しいのですが、条件式の書き方(≒コードの書き方)と言うより前に考え方が頭の中でまだまとまっていないのではないかな、と言うかんじがします。もしそうである場合、条件式の書き方を回答でいただいても次はやっぱり自力で解決できない可能性があるかな、と。頭の中の設計をコードで具現化するに過ぎないので、頭の中でできないことは決してコードには落とせません。
dodox86へ
うーん。正直、自分でもよくわかりません。「考え方が頭の中でまだまとまっていない」このように指摘されると「そうなのかも」と思います。頭の中の設計というのは、どうゆうものなのでしょうか?まずこれやって、次にこれやって、最後にこれやってみたいな事でしょうか?何かフレームワークみたいな物があるのでしょうか?設計って入門書とかに書かれていたりしますか?
BeatStarさんへ
タイトル変更できました。編集ボタンがあるんですね。見落としていました。
BeatStarさんへ
3の倍数は、3 6 9 12 15 18 21 24 27 と掛け算の3の段のことだと思っています。
> 3の倍数は、3 6 9 12...
Okです。
> タイトル変更できました。編集ボタンがあるんですね。見落としていました。
これもOkです。
> 頭の中の設計というのは、どうゆうものなのでしょうか?まずこれやって、次にこれやって、最後にこれやってみたいな事でしょうか?
まぁ、そうです。言葉の捉え方、どれくらいの細かさで考えているかは人それぞれで違うと思いますが。
やりたいこと(what)の羅列も設計だし、どのように1行1行ごとに実行していくか(how)考えることも設計と呼びます。
ただ、プログラミングは1行1行ごとに具体的にイメージできないとコードを書けないはずですよね。
何となく書いていくと「どこをどう直したら良いでしょうか。」みたいな質問になりがちです。
> 何かフレームワークみたいな物があるのでしょうか?
いいえ。特に無いです。
> 設計って入門書とかに書かれていたりしますか?
いいえ。特に無いです。
回答ではないコメントばかりになりましたのでこの辺にしますが、既に回答を複数いただいていますので、対応しましょう。
回答3件
あなたの回答
tips
プレビュー