質問編集履歴

2

具体例を追加します。

2020/09/30 23:44

投稿

kinako_make
kinako_make

スコア7

test CHANGED
File without changes
test CHANGED
@@ -12,6 +12,22 @@
12
12
 
13
13
 
14
14
 
15
+ 例:123の文字列の全パターンの並び順↓の文字列を1つずつListに追加していきたいです。
16
+
17
+ 123
18
+
19
+ 132
20
+
21
+ 213
22
+
23
+ 231
24
+
25
+ 312
26
+
27
+ 321
28
+
29
+
30
+
15
31
  2.
16
32
 
17
33
  sortメソッドで、得た全並び順の数値を比較していきたいです。
@@ -24,10 +40,48 @@
24
40
 
25
41
 
26
42
 
43
+ 追記しました。
44
+
45
+ 最終的にはやりたいことです。
46
+
47
+ 123には、それぞれに下記のように数値が割り振られているので自分よりも大きい数値が前にあれば割り振られた数値を加算していき合計を求めたいです。
48
+
49
+ 1には3
50
+
51
+ 2には2
52
+
53
+ 3には1
54
+
55
+
56
+
57
+ 例:
58
+
59
+ 123 → 番号順なのでOK
60
+
61
+ 132 → 3が2より大きい → 2
62
+
63
+ 213 → 2が1より大きい → 3
64
+
65
+ 231 → 23が1より大きい → 3+3=6
66
+
67
+ 312 → 3が1,2より大きい → 2+3=5
68
+
69
+ 321 → 3が2より大きい、3,2が1より大きい → 2 + 3+3 = 8
70
+
71
+
72
+
73
+
74
+
75
+ 説明がうまくできていなく、わかりずらくすみません。
76
+
27
77
  よろしくお願いいたします。
28
78
 
29
79
 
30
80
 
81
+
82
+
83
+
84
+
31
85
  ```import java.util.*;
32
86
 
33
87
 

1

コード追加、本文変更

2020/09/30 23:44

投稿

kinako_make
kinako_make

スコア7

test CHANGED
File without changes
test CHANGED
@@ -1,77 +1,205 @@
1
1
  ### 前提・実現したいこと
2
2
 
3
- まず課題の問題は、複数匹のペットのご飯を食べる時間の合計の最小値を表示することです。
4
-
5
- 何匹いるのか、それぞれ食べるのにかかる時間が与えられます。
6
-
7
- 次にし順抜かされらそれに対る不満度が与えられます
8
-
9
- 合計全並び順の中での最小です
10
-
11
-
12
-
13
- 合計時間の求め方は、待ち時間もいれます。
14
-
15
- 例えば、3匹いて食べるのにそれぞれ[7,6,5]かかるとします。
16
-
17
- 1匹目7
18
-
19
- 2匹目6待った7
20
-
21
- 3匹目5と待っ7+6
22
-
23
- の合計38とります
24
-
25
-
26
-
27
- 不満度は、例えば[3,2,1]と
28
-
29
-
30
-
31
-
32
-
33
- ここに質問の内容を詳しく書いてください。
34
-
35
- (例)PHP(CakePHP)で●●なシステムを作っています。
36
-
37
- ■■な機能を実装中に以下のエラーメッセージが発生しました。
38
-
39
-
40
-
41
- ### 発生してい問題・エラーメッセージ
42
-
43
-
3
+
4
+
5
+ 1.
6
+
7
+ sortメソッドで引数で渡た文字列の全パターンの並び順をListに追加していきいです。
8
+
9
+ 実際、戻りを表示させてもなにも追加されていません
10
+
11
+ 原因がわかりません。
12
+
13
+
14
+
15
+ 2.
16
+
17
+ sortメソッドで、得た全並び順数値を比較していきたいです。
18
+
19
+ コードだ隣り合う数値しか比較できませんが、1つとばしや、2つとばしなど
20
+
21
+ 入力されたどんな桁数でも全部比較をしていきいです。
22
+
23
+ どんアルゴリズムでしていけばいいでしょうか
24
+
25
+
26
+
27
+ よろしくお願いいたします。
28
+
29
+
30
+
31
+ ```import java.util.*;
32
+
33
+
34
+
35
+
36
+
37
+ public class Main {
38
+
39
+ /*
40
+
41
+ ・1行目に猫の数 N 、許容され不満度の合計 M
42
+
43
+ ・2行目から N 行に、食べる時間 ai と不満度 bi
44
+
45
+ 不満度が超えない組み合わせのみ、食事の時間を計算し最小値を比較
46
+
47
+ 組み合わせは nPn = n! = n * (n - ) * ... 3P = 3*2*1 = 6通りの並び方がある
48
+
49
+ 最小値を表示
50
+
51
+
52
+
53
+ 不満度が M を越えないように並び替えた時の食事にかかる時間の合計の最小値を出力
54
+
55
+ */
56
+
57
+ public static void main(String[] args) {
58
+
59
+ Scanner sc = new Scanner(System.in);
60
+
61
+
62
+
63
+ int catNum = sc.nextInt(); //猫の数
64
+
65
+ int hateMax = sc.nextInt(); //不満度の教養範囲
66
+
67
+
68
+
69
+ int[] eatTime = new int[catNum]; //各猫の食事の時間
70
+
71
+ int[] hate = new int[catNum]; //各猫の不満度
72
+
73
+ String catNo = ""; //各猫につけた番号
74
+
75
+
76
+
77
+ for (int i = 0; i < catNum; i++){
78
+
79
+ //猫の数分、食事時間と不満度、猫の番号を配列に格納
80
+
81
+ eatTime[i] = sc.nextInt();
82
+
83
+ hate[i] = sc.nextInt();
84
+
85
+ catNo += i;
86
+
87
+
88
+
89
+ // System.out.println(eatTime[i] + " " + hate[i] + " " + catNo);
90
+
91
+ }
92
+
93
+ List<String> result = new ArrayList<>(sort(catNo,"",hate));
94
+
95
+ System.out.println(result);
96
+
97
+ }
98
+
99
+ //全組み合わせを列挙するメソッド
100
+
101
+ /*
102
+
103
+ i番目の文字を抜いた文字列とans+i番目の文字列が、次のpermutationのq, ansになります
104
+
105
+ qは再帰のたびにどんどん短くなり、最終的に1文字になったらansに連結したものが出力されます。
106
+
107
+ i番目を抜いて連結するというのを繰り返すので最終的に全組み合わせを列挙することができます、
108
+
109
+ */
110
+
111
+ static List<String> sort(String catNo, String ans,int[] hate){ //q=選択候補の文字列、ans=選択済みの文字列
112
+
113
+
114
+
115
+ int len = catNo.length();
116
+
117
+ //System.out.println("呼び出し:q= " +q + " ans= " + ans);
118
+
119
+ List<String> result = new ArrayList<>();
120
+
121
+ if(len <= 1) {
122
+
123
+ // System.out.println(ans + catNo);
124
+
125
+ // System.out.println("calcメソッド呼ぶよ");
126
+
127
+ //String str = ans + catNo;
128
+
129
+ result.add(ans + catNo);
130
+
131
+ // calc(result,hate);
132
+
133
+ }else {
134
+
135
+
136
+
137
+ for (int i = 0; i < len; i++) {
138
+
139
+ //System.out.println("ループ" + i + "回目(q=)" + q + "-------------------------");
140
+
141
+ //System.out.println( q.substring(0, i) + "," + q.substring(i + 1) + "," + ans + "," + q.charAt(i));
142
+
143
+
144
+
145
+ sort(catNo.substring(0, i) + catNo.substring(i + 1),ans + catNo.charAt(i),hate);
146
+
147
+ }
148
+
149
+ }
150
+
151
+
152
+
153
+ return result;
154
+
155
+ }
156
+
157
+ //隣り合う不満度を計算するメソッド
158
+
159
+ static void calc(String catNo,int[] hate){
160
+
161
+
162
+
163
+ int len = catNo.length();
164
+
165
+ int sum = 0;
166
+
167
+ //隣り合う数値で右の数値のが小さい(=順番を抜かされた)不満度を加算
168
+
169
+ for (int i = 0; i < len; i++){
170
+
171
+ if(i == len - 1){
172
+
173
+ break;
174
+
175
+ }
176
+
177
+ //1文字ずつcharをintに変換
178
+
179
+ int left = Character.getNumericValue(catNo.charAt(i));
180
+
181
+ int right = Character.getNumericValue(catNo.charAt(i + 1));
182
+
183
+ //不満度を加算
184
+
185
+ //System.out.println(left + " " + right);
186
+
187
+ if(left > right){
188
+
189
+ sum += hate[right];
190
+
191
+ }
192
+
193
+ }
194
+
195
+ System.out.println("sum=" + sum);
196
+
197
+ }
198
+
199
+
200
+
201
+ }
202
+
203
+ コード
44
204
 
45
205
  ```
46
-
47
- エラーメッセージ
48
-
49
- ```
50
-
51
-
52
-
53
- ### 該当のソースコード
54
-
55
-
56
-
57
- ```ここに言語名を入力
58
-
59
- ソースコード
60
-
61
- ```
62
-
63
-
64
-
65
- ### 試したこと
66
-
67
-
68
-
69
- ここに問題に対して試したことを記載してください。
70
-
71
-
72
-
73
- ### 補足情報(FW/ツールのバージョンなど)
74
-
75
-
76
-
77
- ここにより詳細な情報を記載してください。