質問編集履歴

1

2020/08/03 07:48

投稿

reina1125
reina1125

スコア21

test CHANGED
File without changes
test CHANGED
@@ -1,175 +1,3 @@
1
- ```java
2
-
3
- int ProjectA[][]={ {1,1,0,0},{0,1,0,0},{0,0,0,1} };
4
-
5
- int ProjectB[][]={ {1,0,1,0},{0,0,1,0},{1,0,0,0} };
6
-
7
- int ProjectC[][]={ {1,0,0,1},{0,0,0,1},{0,0,1,0} };
8
-
9
- ```
10
-
11
- 上の9つの要素を使って、和が{1,1,1,1}になるような組み合わせを全列挙したいです。
12
-
13
- 出力は下記のような「A社の1位のプロジェクト=1」のような表現で表したいです。
14
-
15
1
  組み合わせを1つ列挙することはできるのですが、2つ目以降の組み合わせの列挙の仕方がわかりません。
16
2
 
17
3
  恐らくこのプログラムもあまりスマートではないと思うので、効率的な解き方があれば教えてください。
18
-
19
-
20
-
21
-
22
-
23
- ```java
24
-
25
-
26
-
27
- public class Combination {
28
-
29
-
30
-
31
- public static void main(String[] args) {
32
-
33
-
34
-
35
-
36
-
37
- int Project1[][]={ {1,1,0,0},{0,1,0,0},{0,0,0,1} };
38
-
39
- int Project2[][]={ {1,0,1,0},{0,0,1,0},{1,0,0,0} };
40
-
41
- int Project3[][]={ {1,0,0,1},{0,0,0,1},{0,0,1,0} };
42
-
43
-
44
-
45
- //companies:3, priority:3, type:4
46
-
47
- int Project[][][]=new int[3][][];
48
-
49
- Project[0]=Project1;
50
-
51
- Project[1]=Project2;
52
-
53
- Project[2]=Project3;
54
-
55
-
56
-
57
- int totalSkill[]={1,1,1,1};
58
-
59
- int allTypes=java.util.Arrays.stream(totalSkill).sum();
60
-
61
- int skillBox[]={1,1,1,1};
62
-
63
- int memo[][]=new int[3][3];
64
-
65
-
66
-
67
- for(int i=0; i<3; i++) {
68
-
69
- for(int j=0; j<3; j++) {
70
-
71
- for(int t=0; t<allTypes; t++) {
72
-
73
- int counts=0;
74
-
75
- //continue or not
76
-
77
- if(java.util.Arrays.stream(skillBox).sum()==0) {
78
-
79
- break;
80
-
81
- }
82
-
83
- //check
84
-
85
- for(int k=0; k<4; k++) {
86
-
87
- if(skillBox[k]>=Project[i][j][k]) {
88
-
89
- counts++;
90
-
91
- }
92
-
93
- else {
94
-
95
- break;
96
-
97
- }
98
-
99
- }
100
-
101
- //choice
102
-
103
- if(counts==4) {
104
-
105
- for(int k=0; k<4; k++) {
106
-
107
- skillBox[k]=skillBox[k]-Project[i][j][k];
108
-
109
- }
110
-
111
- memo[i][j]++;
112
-
113
- }
114
-
115
- else {
116
-
117
- break;
118
-
119
- }
120
-
121
- }
122
-
123
- }
124
-
125
- }
126
-
127
-
128
-
129
-
130
-
131
- String[] companies= {"A社","B社","C社"};
132
-
133
- for(int i=0; i<3; i++) {
134
-
135
- for(int j=0; j<3; j++) {
136
-
137
- System.out.println(companies[i]+"の"+(j+1)+"位のプロジェクト="+memo[i][j]);
138
-
139
- }
140
-
141
- }
142
-
143
- }
144
-
145
-
146
-
147
- }
148
-
149
-
150
-
151
-
152
-
153
-
154
-
155
- ```
156
-
157
- [出力]
158
-
159
- A社の1位のプロジェクト=1
160
-
161
- A社の2位のプロジェクト=0
162
-
163
- A社の3位のプロジェクト=1
164
-
165
- B社の1位のプロジェクト=0
166
-
167
- B社の2位のプロジェクト=1
168
-
169
- B社の3位のプロジェクト=0
170
-
171
- C社の1位のプロジェクト=0
172
-
173
- C社の2位のプロジェクト=0
174
-
175
- C社の3位のプロジェクト=0