teratail header banner
teratail header banner
質問するログイン新規登録

質問編集履歴

1

2020/08/03 07:48

投稿

reina1125
reina1125

スコア21

title CHANGED
File without changes
body CHANGED
@@ -1,88 +1,2 @@
1
- ```java
2
- int ProjectA[][]={ {1,1,0,0},{0,1,0,0},{0,0,0,1} };
3
- int ProjectB[][]={ {1,0,1,0},{0,0,1,0},{1,0,0,0} };
4
- int ProjectC[][]={ {1,0,0,1},{0,0,0,1},{0,0,1,0} };
5
- ```
6
- 上の9つの要素を使って、和が{1,1,1,1}になるような組み合わせを全列挙したいです。
7
- 出力は下記のような「A社の1位のプロジェクト=1」のような表現で表したいです。
8
1
  組み合わせを1つ列挙することはできるのですが、2つ目以降の組み合わせの列挙の仕方がわかりません。
9
- 恐らくこのプログラムもあまりスマートではないと思うので、効率的な解き方があれば教えてください。
2
+ 恐らくこのプログラムもあまりスマートではないと思うので、効率的な解き方があれば教えてください。
10
-
11
-
12
- ```java
13
-
14
- public class Combination {
15
-
16
- public static void main(String[] args) {
17
-
18
-
19
- int Project1[][]={ {1,1,0,0},{0,1,0,0},{0,0,0,1} };
20
- int Project2[][]={ {1,0,1,0},{0,0,1,0},{1,0,0,0} };
21
- int Project3[][]={ {1,0,0,1},{0,0,0,1},{0,0,1,0} };
22
-
23
- //companies:3, priority:3, type:4
24
- int Project[][][]=new int[3][][];
25
- Project[0]=Project1;
26
- Project[1]=Project2;
27
- Project[2]=Project3;
28
-
29
- int totalSkill[]={1,1,1,1};
30
- int allTypes=java.util.Arrays.stream(totalSkill).sum();
31
- int skillBox[]={1,1,1,1};
32
- int memo[][]=new int[3][3];
33
-
34
- for(int i=0; i<3; i++) {
35
- for(int j=0; j<3; j++) {
36
- for(int t=0; t<allTypes; t++) {
37
- int counts=0;
38
- //continue or not
39
- if(java.util.Arrays.stream(skillBox).sum()==0) {
40
- break;
41
- }
42
- //check
43
- for(int k=0; k<4; k++) {
44
- if(skillBox[k]>=Project[i][j][k]) {
45
- counts++;
46
- }
47
- else {
48
- break;
49
- }
50
- }
51
- //choice
52
- if(counts==4) {
53
- for(int k=0; k<4; k++) {
54
- skillBox[k]=skillBox[k]-Project[i][j][k];
55
- }
56
- memo[i][j]++;
57
- }
58
- else {
59
- break;
60
- }
61
- }
62
- }
63
- }
64
-
65
-
66
- String[] companies= {"A社","B社","C社"};
67
- for(int i=0; i<3; i++) {
68
- for(int j=0; j<3; j++) {
69
- System.out.println(companies[i]+"の"+(j+1)+"位のプロジェクト="+memo[i][j]);
70
- }
71
- }
72
- }
73
-
74
- }
75
-
76
-
77
-
78
- ```
79
- [出力]
80
- A社の1位のプロジェクト=1
81
- A社の2位のプロジェクト=0
82
- A社の3位のプロジェクト=1
83
- B社の1位のプロジェクト=0
84
- B社の2位のプロジェクト=1
85
- B社の3位のプロジェクト=0
86
- C社の1位のプロジェクト=0
87
- C社の2位のプロジェクト=0
88
- C社の3位のプロジェクト=0