質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Q&A

6回答

11050閲覧

java出力された数字のカウントについて

nijins

総合スコア0

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

1グッド

2クリップ

投稿2020/05/13 03:23

編集2020/05/13 03:25

前提・実現したいこと

1から5000までの数字を出力し、5の個数をカウントしたい。
例えば1は1個、11だったら、1は2個、111は1が3個とカウントしたいです。
途中まではかいたのですが、ここから個別にカウントする方法がわからないので教えていただきたい。

発生している問題・エラーメッセージ

該当のソースコード

int count = 0; for(int i = 0; i <= 5000; i++){ System.out.println(i); if(i % 5 == 0){ count++; } } System.out.println(count+"個");

試したこと

調べたが分からなかった。

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

DrqYuto👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

m.ts10806

2020/05/13 03:27

「調べたけど分からなかった」だけで伝わる情報は何もありません。 「検索に使ったキーワード」「参考にした記事」あと「それによって試したこと」が全て揃っていてようやく伝わります。
yamap55

2020/05/13 03:28

仮に1から10までで1をカウントしたい場合、1で1つ、10で1つで「2」を出力したい。という事であっていますか?
m.ts10806

2020/05/13 03:33

質問は編集できますので、適宜追記してください。 あと、全部理解できないのか少しは理解できたのかで違います。 分かっていること分かっていないことを明確にしてみてください。 でないと、 つくアドバイスも理解できないとなり、解決には至れません。
nijins

2020/05/13 03:33

>仮に1から10までで1をカウントしたい場合、1で1つ、10で1つで「2」を出力したい。という事であっていますか? ↑こちらであっております。1が1つ、10で1つだから1の合計は2という事です。
Zuishin

2020/05/13 03:34

プログラミング以前に知能テストで落とされています。 1 から 10 までには 5 が一つ、 20 までには 5 と 15 の二つ、 30 までには 5 と 15 と 25 の三つ、 60 までには 5, 15, 25, 35, 45, 50, 51, 52, 53, 54, 55, 55, 56, 57, 58, 59 の 16 個 これを解いてください。 調べるのではなく、考えるのです。
dodox86

2020/05/13 03:44

「5の個数をカウントしたい」としつつ、「例えば1は1個、11だったら、1は2個」。もう、質問自体が分かりません。
Zuishin

2020/05/13 04:36 編集

プログラミングしなくても暗算でできたので答え書いときます。 500 + 50 * 10 + 5 * 100 + 1 = 1501 System.out.println("1501個");
guest

回答6

0

1から5000までの数字を出力し、5の個数をカウントしたい。

例えば1は1個、11だったら、1は2個、111は1が3個とカウントしたいです

であれば、

java

1for(int i = 1; i <= 5000; i++ ) { 2 System.out.println( i + " : " + String.valueOf(i).chars().filter(o -> o == '1').count()); 3}

みたいな感じかもしれん。。。わからん。

投稿2020/05/13 04:16

編集2020/05/13 04:19
momon-ga

総合スコア4826

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

1の位に5がある数は、110に1個、1120に1個…と数えられる。
10の位に5がある数は、1100に10個(5059)、101200に10個(150159)…と数えられる。

後は自分でお考え下さい。

投稿2020/05/13 03:34

swordone

総合スコア20669

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

JAVA

1while(i>0){ 2 if((i%10)==5) count++; 3 i/=10; 4}

でどうぞ

投稿2020/05/13 03:30

y_waiwai

総合スコア88042

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

頭で場合の数を数える

最も理想的な解法です。C02排出量がゼロ(人間は対象外)。世界に貢献する自負心が芽生えます。

プログラムを組む

肉体労働しなければなりません。お腹が空きます。

  • 余り5を計算する : 遅すぎて使い物になりません <- 遅くありません。訂正します
  • 文字列に変換する : なんとかなりそうです

まず0-9の分布を調べてましょう。

  • 1 <= n <= 5000

0=1392, 1=2500, 2=2500, 3=2500, 4=2500, 5=1501, 6=1500, 7=1500, 8=1500, 9=1500

  • 1 <= n <= 9999

0=2889, 1=4000, 2=4000, 3=4000, 4=4000, 5=4000, 6=4000, 7=4000, 8=4000, 9=4000

5000までだと5が1501個なのは5000を含めるからですね。9999までだと1-9 は平等に分布。0が不遇なのは上の桁になれないから。右端で支えるだけの存在ですが、0がないと位取り記数法が成立しません。

分布を確かめるコード。

Java

1import java.util.Map; 2import java.util.TreeMap; 3import java.util.function.Function; 4import java.util.stream.Collectors; 5import java.util.stream.Stream; 6 7public class DigitsFrequency { 8 static Function<Integer, Map<String,Long>> freqs = size -> 9 Stream.iterate(1, x -> x + 1) 10 .limit(size) 11 .map(String::valueOf) 12 .flatMap(s -> Stream.of(s.split(""))) 13 .collect( 14 Collectors.groupingBy( 15 c -> c, 16 TreeMap::new, 17 Collectors.counting())); 18 public static void main(String[] args) { 19 System.out.println(freqs.apply(5000)); 20 System.out.println(freqs.apply(9999)); 21 } 22} 23//System.out.println(Stream.iterate(/* 1から5000までの数字を出力し、5の個数をカウントしたい。 */1, x -> x + 1).limit(/* 例えば1は1個、11だったら、1は2個、111は1が3個とカウントしたいです。 */5000).map(String::valueOf).flatMap(/* 途中まではかいたのですが、ここから個別にカウントする方法がわからない */s -> Stream.of(s.split(""))).filter(c -> "5".equals(c)).count());

クイズ:ソースコードの中に回答がかくれています。賞品はありません。

投稿2020/05/13 10:23

編集2020/05/13 23:06
xebme

総合スコア1090

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

初学者程度の知識しかありません。言葉の意味通り、0から5000までの5の数をカウントするなら、以下の方法がいいかと思います。

Java

1public class count5 { 2 public static void main(String[] args) { 3 int num = 0; 4 int count = 0; 5 for(int i = 0; i < 5001; i++) { 6 String str = String.valueOf(num); 7 //数字を文字列化します 8 9 String[] spl = str.split(""); 10 //文字列を一文字ずつ分割します 11 12 for(int j = 0; j < spl.length; j++) { 13 if("5".equals(spl[j])) { 14 count++; 15 //それぞれ分割した文字が5と等しければcountを1増やします。 16 17 } 18 }num++; 19 }System.out.println(count + "個"); 20 } 21} 22

投稿2023/02/13 13:00

Kero

総合スコア2

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

java

1public class Main { 2 public static void main(String[] args) { 3 int count = 0; 4 for (int i = 1; i <= 100; i++) { 5 count += count_5(i); 6 } 7 System.out.println(count); 8 } 9 static private int count_5(int num) { 10 int count = 0; 11 for (String c : String.valueOf(num).split("")) { 12 if (c.equals("5")) { 13 count++; 14 } 15 } 16 // System.out.println("" + num + ":" + count); 17 return count; 18 } 19}

投稿2020/05/14 20:29

katoy

総合スコア22324

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問