今eclipseでjavaの勉強をしているのですがある問題が解けません。
それはキーボードから奇数を入力して例えば3なら
_■
■_■
_■
と表示させ、5なら
__■
_■_■
■___■
_■_■
__■
と表示させるものです。
プログラムは自分で考えたいのですがまったくわかりません。
ヒントをいただけると幸いです。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答4件
0
プログラムは自分で考えたいのですが
→すばらしいと思います!頑張ってください!
ロジックを考えると以下のようになると思います。
・入力値(以下X)分ループ
・一番上の先頭""の数は、X/2です(例:5/2=2.5=2(intでは0.5は切り捨てられます))
・二番目の先頭""の数は、(X/2)-1です。
・三番目の先頭""の数は、(X/2)-2です。
・真ん中の先頭""の数は、もちろん0。
・各段の間の"_"の数は、0,1,3,5,7・・・と上がってX-2で折り返します。
これらをまとめて、"_"の数を求めるにはどういうコード(式)を書けばいいか考えてみてください。
参考になれば幸いです。
投稿2015/05/27 08:42
総合スコア305
0
過去に同じような質問が投稿されていたようです。
こちらを参考にしてみてはいかがでしょう?
投稿2015/05/27 08:37
総合スコア159
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
ベストアンサー
①先頭の""を出力
②"■"を出力
③間の""を出力(最初と最後の行はやらない)
④2つ目の"■"を出力(最初と最後の行はやらない)
⑤①~④を入力された奇数分行う。
ちょっと長ったらしくなって、あまりスッキリしないコードですが、
ヒントのコードをどうぞ。★マークの所を考えてみてください。
lang
1 void test(int input){ 2 int cnter_count = 0; // 間に入れる"_"の数 3 int head_count = input/2; // 先頭に入れる"_"の数 4 Boolean returnFlag = false; // 折り返しフラグ 5 string text = ""; 6 7 for (int i=0; i<input; i++) { 8 9 for(int j=0; j<head_count; j++) { 10 // ★先頭"_"をtextに追加 11 } 12 13 // ★1つ目の"■"をtextに追加 14 15 if(cnter_count != 0){ 16 for(int k=0; k<cnter_count; k++) { 17 // ★間"_"をtextに追加 18 } 19 // ★2つ目の"■"をtextに追加 20 } 21 if(cnter_count == input-2){ 22 returnFlag = true; // 折り返しフラグ true 23 } 24 if(returnFlag){ 25 // ★先頭"_"の数を1つ増やす 26 if(cnter_count == 1){ 27 // ★間"_"の数を減らす(最後だけ1つで、あとは2つづつ減らす) 28 }else{ 29 // ★間"_"の数を減らす(最初だけ1つで、あとは2つづつ減らす) 30 } 31 }else{ 32 // ★先頭"_"の数を1つ減らす 33 if(cnter_count == 0){ 34 // ★間"_"の数を増やす(最初だけ1つで、あとは2つづつ増やす) 35 }else{ 36 // ★間"_"の数を増やす(最初だけ1つで、あとは2つづつ増やす) 37 } 38 } 39 // ★改行をtextに追加 40 } 41 // ★textを出力 42 }
投稿2015/05/28 04:55
総合スコア305
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2015/05/27 10:06
2015/05/27 12:48