🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Java

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

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

Q&A

解決済

1回答

761閲覧

数列の組み合わせのうち最小のものを出力する

d_96a

総合スコア15

Java

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

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

1グッド

1クリップ

投稿2019/12/24 09:28

###実現したいこと
入力によって得られたn桁の数列xの組み合わせのうち数値として最小のものをresultとして出力するプログラムを作成しています。※先頭の位が0になってはならず(012 etc)、桁数の制限はないものとします

入出力例) x=201 result=102 | x=987654321 reslut=123456789

###本題
入力で得られる数列の桁数が決まっていないので、「文字列で数列を受け取ってリストや配列に変換して」と回りくどい方法(下記コード)をとっているのですが、
数列を受け取り、最小に並び替えるだけならint型やlong型でもできるのでしょうか。
ご存じであれば、方法等も併せてご教示いただけないでしょうか。

java

1import java.util.ArrayList; 2import java.util.Collections; 3import java.util.Scanner; 4 5public class App { 6 7 public static void main(String[] args) { 8 Scanner scanner = new Scanner(System.in); 9 String str = scanner.nextLine(); 10 ArrayList<Integer> num = new ArrayList<Integer>(); 11 ArrayList<Integer> result = new ArrayList<Integer>(); 12 String[] Str = str.split(""); 13 ArrayList<String> lines = new ArrayList<>(); 14 Collections.addAll(lines, Str); 15 for (int i = 0; i < lines.size(); i++) { 16 try { num.add(Integer.parseInt(lines.get(i))); 17 }catch (NumberFormatException e) {} 18 } 19 Collections.sort(num); 20 System.out.println(num); 21 int flag = 0; 22 for(int i=0;i<num.size();i++){ 23 if(num.get(i)!=0&&flag==0){ 24 result.add(num.get(i)); 25 flag = 1; 26 }else if(num.get(i)==0&&flag==1){ 27 //先頭以外が0の場合の処理 28 }else { 29 //他の数値の処理 30 } 31 } 32 System.out.println(result); 33 } 34}
DrqYuto👍を押しています

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

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

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

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

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

swordone

2019/12/24 10:11

やることは小学生の数字遊びレベルですので、「どういう数なら小さいか」を考えればすぐです。
jimbe

2019/12/24 11:24

> 数列の桁数が決まっていない という条件がある以上, 有限の int や long は使えないでしょう.
guest

回答1

0

ベストアンサー

正常ルートは合っていると思います.

java

1public class App { 2 public static void main(String[] args) { 3 Scanner scanner = new Scanner(System.in); 4 String x = scanner.nextLine(); 5 String result = createMinValueString(x); 6 System.out.println("x="+x+" result="+result); 7 } 8 private static String createMinValueString(String x) { 9 if(x.length() < 2) return x; //1文字以下 10 char[] chars = x.toCharArray(); 11 Arrays.sort(chars); 12 if(chars[chars.length-1] == '0') return x; //全て0 13 for(int i=0; i<chars.length; i++) { 14 if(chars[i] != '0') { 15 if(i != 0) { 16 chars[0] = chars[i]; 17 chars[i] = '0'; 18 } 19 break; 20 } 21 } 22 return new String(chars); 23 } 24}

投稿2019/12/24 12:23

jimbe

総合スコア13204

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

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

d_96a

2019/12/25 01:04

ご回答ありがとうございます! ここまですっきりできるのですね。 こちらを参考に自分なりにプログラムを作成させていただきます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問