Javaアルゴリズムで分からないことがあるので質問します。
a,b,c,d,e,f,g
これらの文字を各一回使ってできる文字列の、全てのパターンを一覧で表示したいのですが、なかなかうまくいきません。
出力結果は、下記のように全パターン出力するようなJavaプログラムなんですが。
↓出力結果↓
abcdefgh
abcdefhg
abcdehfg
・・・・・・・・
hgfedacb
hgfedcab
hgfedcba
※自分ではとりあえずここまでできています。
public class Test {
public static void main(String[] args) {
String[] pattern = {"a","b","c","d","e","f","g","h"};
for(int i = 0; i <= pattern.length; i++){
System.out.print(pattern[i]);
if(i == pattern.length){
System.out.println("");
}
}
}
}
宜しくお願いします。
A 回答 (3件)
- 最新から表示
- 回答順に表示
No.3
- 回答日時:
package pp;
public class perm0 {
static void print_perm(int[] perm){
for(int x: perm){
System.out.print(x + " ");
}
System.out.println();
}
static void make_perm(int n, int[] perm, boolean[] flag){
if(n == perm.length){
print_perm(perm);
} else {
for(int i = 1; i <= perm.length; i++){
if(flag[i]) continue;
perm[n] = i;
flag[i] = true;
make_perm(n + 1, perm, flag);
flag[i] = false;
}
}
}
//数
public static void main(String[] args){
make_perm(0, new int [8], new boolean [9]);
}
}
No.2
- 回答日時:
効率とか考えずに総当りなアルゴリズムですけど
全桁分ループして、上位の桁で使用済みな文字だったらスキップ、
使用していない文字だったら連結して処理続行して、
一番内側のループで表示すればできそうじゃない?
※インデントを全角スペースにしています。
char[] ch = {'a', 'b', 'c'};
StringBuilder buf = new StringBuilder();
public static void main(String[] args) {
// 基本的な考え方
for(int loop1 = 0; ch.length; loop1++) {
for(int loop2 = 0; ch.length; loop2++) {
if (loop1 == loop2) continue;
for(int loop3 = 0; ch.length; loop3++) {
if (loop1 == loop3 || loop2 == loop3) continue;
buf.setLength(0);
buf.append(ch[loop1]).append(ch[loop2]).append(ch[loop3]);
System.out.println(buf.toString());
}
}
}
// 再帰処理にしてみると
f("");
}
public void f(String code) {
if (code.length() == ch.length) {
Systen.out.println(code);
} else {
for (int i=0; i<ch.length; i++) {
if (-1 < code.indexOf(ch[i])) continue;
buf.setLength(0);
buf.append(code).append(ch[i]);
f(buf.toString());
}
}
}
動作確認はしていないので、あしからず。
No.1
- 回答日時:
8 * 7 * 6 * 5 * 4 * 3 * 2 * 1 = 40320個もあるので上記サイトでは最後まで表示しきってくれなかったが、
手元でテキストファイルにリダイレクトしてみたらちゃんと出力されているようだった。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
- ・ゆるやかでぃべーと タイムマシンを破壊すべきか。
- ・歩いた自慢大会
- ・許せない心理テスト
- ・字面がカッコいい英単語
- ・これ何て呼びますか Part2
- ・人生で一番思い出に残ってる靴
- ・ゆるやかでぃべーと すべての高校生はアルバイトをするべきだ。
- ・初めて自分の家と他人の家が違う、と意識した時
- ・単二電池
- ・チョコミントアイス
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
続・ZZZ,ZZZ,ZZ9形式の金額形式...
-
総称型ArrayList<E>への参照...
-
ループ処理の際、最後だけ","を...
-
数値⇒漢数字変換 java
-
countに実行した回数をいれたい...
-
エラー(互換性の無い型)
-
論理演算子”||”またはの入力方法
-
javaで素数判断プログラム作成...
-
java 配列
-
Ctrl+Zが入力されると終了する...
-
java キーボード入力された値の...
-
画面出力の際の繰り返しと入力...
-
javaプログラミングでの文字化...
-
テキストボックスに入力された...
-
フローチャートが作れず、困っ...
-
Java CDLC 1.0 での日付計算
-
Path型をString型へ変換する(Java)
-
JSPやサーブレットでSystem.out...
-
Java配列でNullPointerExceptio...
-
System.err. printlnとSystem.o...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ループ処理の際、最後だけ","を...
-
論理演算子”||”またはの入力方法
-
続・ZZZ,ZZZ,ZZ9形式の金額形式...
-
java キーボード入力された値の...
-
総称型ArrayList<E>への参照...
-
JAVAのfor文で困っています。
-
テキストボックスに入力された...
-
Java、2の0乗~10乗の表示
-
コマンドライン引数の例外処理...
-
7つ数字を表示したら改行すると...
-
数値⇒漢数字変換 java
-
countに実行した回数をいれたい...
-
Ctrl+Zが入力されると終了する...
-
Java 入力した整数値の合計を、...
-
繰り返しによる星印の出力
-
配列から最大値・最小値
-
2つのスクロールバーを連動させ...
-
要素数が10の配列で、乱数0~9...
-
2次元配列の並び替え
-
javaです。1月1日から日数入れ...
おすすめ情報