質問編集履歴

5

誤字の訂正

2018/04/30 04:01

投稿

退会済みユーザー
test CHANGED
@@ -1 +1 @@
1
- so和が7の倍数となる3つの数字の組み合わせを効率よく数えたいです。
1
+ 和が7の倍数となる3つの数字の組み合わせを効率よく数えたいです。
test CHANGED
File without changes

4

ソースの訂正

2018/04/30 04:01

投稿

退会済みユーザー
test CHANGED
@@ -1 +1 @@
1
- 和が7の倍数となる3つの数字の組み合わせを効率よく数えたいです。
1
+ so和が7の倍数となる3つの数字の組み合わせを効率よく数えたいです。
test CHANGED
@@ -8,9 +8,11 @@
8
8
 
9
9
  ### 私の現在のベストな考え
10
10
 
11
- (I)2重for文を使って7で割ったときの余りがそれぞれいくつかあるか数えます。
11
+ (I)2重for文を使って**7で割ったときの**余りがそれぞれいくつかあるか数えます。
12
12
 
13
13
  ```Java
14
+
15
+   //受け取ったデータを7で割った余りに変換しました。
14
16
 
15
17
  int []count = new int[7];
16
18
 

3

説明の追加

2018/04/30 03:58

投稿

退会済みユーザー
test CHANGED
File without changes
test CHANGED
@@ -58,92 +58,6 @@
58
58
 
59
59
  どなたか、もっと効率の良い方法がありましたら、ご教授できないでしょうか?
60
60
 
61
+ もしかしたら、根本から変えるべきかもしれません。
62
+
61
63
  よろしくお願い致します。
62
-
63
-
64
-
65
- 私が書いたソースコードを載せておきます。
66
-
67
- ```Java
68
-
69
- import java.util.Scanner;
70
-
71
-
72
-
73
- public class Sum {
74
-
75
- public static void main(String[] args){
76
-
77
-
78
-
79
- Scanner sc = new Scanner(System.in);
80
-
81
- int n = sc.nextInt();
82
-
83
- int[]data = new int[n];
84
-
85
- for(int i = 0; i < n; i++){
86
-
87
- int m = sc.nextInt();
88
-
89
- data[i] = m;
90
-
91
- }
92
-
93
- int []count = new int[7];
94
-
95
- for(int i = 0; i < data.length; i++){
96
-
97
- for(int j = 0; j < 7; j++){
98
-
99
- if(data[i] % 7== j){
100
-
101
- count[j]++;
102
-
103
- }
104
-
105
- }
106
-
107
- }
108
-
109
- int [][]data2 = {{0,1,6},{0,2,5},{0,3,4},{1,2,4},{3,5,6}};
110
-
111
- //int [][]data3 = {{1,1,5},{3,3,1},{2,2,3},{6,6,2},{4,4,6},{5,5,4}};
112
-
113
- int sum = 0;
114
-
115
-
116
-
117
- for(int i = 0; i < 5; i++){
118
-
119
- int tmp = 1;
120
-
121
- for(int j = 0; j < 3; j++){
122
-
123
- tmp *= count[data2[i][j]];
124
-
125
- }
126
-
127
- sum += tmp;
128
-
129
- }
130
-
131
-
132
-
133
- for(int i = 0; i < 6; i++){
134
-
135
- sum += count[i] * (count[i] - 1) * count[(14 - 2 * i) % 7] / 2;
136
-
137
- }
138
-
139
- sum += count[0] * (count[0] - 1) * (count[0] - 2) / 6;
140
-
141
- System.out.println(sum);
142
-
143
-
144
-
145
- }
146
-
147
- }
148
-
149
- ```

2

ソースコードの追加

2018/04/29 08:51

投稿

退会済みユーザー
test CHANGED
File without changes
test CHANGED
@@ -59,3 +59,91 @@
59
59
  どなたか、もっと効率の良い方法がありましたら、ご教授できないでしょうか?
60
60
 
61
61
  よろしくお願い致します。
62
+
63
+
64
+
65
+ 私が書いたソースコードを載せておきます。
66
+
67
+ ```Java
68
+
69
+ import java.util.Scanner;
70
+
71
+
72
+
73
+ public class Sum {
74
+
75
+ public static void main(String[] args){
76
+
77
+
78
+
79
+ Scanner sc = new Scanner(System.in);
80
+
81
+ int n = sc.nextInt();
82
+
83
+ int[]data = new int[n];
84
+
85
+ for(int i = 0; i < n; i++){
86
+
87
+ int m = sc.nextInt();
88
+
89
+ data[i] = m;
90
+
91
+ }
92
+
93
+ int []count = new int[7];
94
+
95
+ for(int i = 0; i < data.length; i++){
96
+
97
+ for(int j = 0; j < 7; j++){
98
+
99
+ if(data[i] % 7== j){
100
+
101
+ count[j]++;
102
+
103
+ }
104
+
105
+ }
106
+
107
+ }
108
+
109
+ int [][]data2 = {{0,1,6},{0,2,5},{0,3,4},{1,2,4},{3,5,6}};
110
+
111
+ //int [][]data3 = {{1,1,5},{3,3,1},{2,2,3},{6,6,2},{4,4,6},{5,5,4}};
112
+
113
+ int sum = 0;
114
+
115
+
116
+
117
+ for(int i = 0; i < 5; i++){
118
+
119
+ int tmp = 1;
120
+
121
+ for(int j = 0; j < 3; j++){
122
+
123
+ tmp *= count[data2[i][j]];
124
+
125
+ }
126
+
127
+ sum += tmp;
128
+
129
+ }
130
+
131
+
132
+
133
+ for(int i = 0; i < 6; i++){
134
+
135
+ sum += count[i] * (count[i] - 1) * count[(14 - 2 * i) % 7] / 2;
136
+
137
+ }
138
+
139
+ sum += count[0] * (count[0] - 1) * (count[0] - 2) / 6;
140
+
141
+ System.out.println(sum);
142
+
143
+
144
+
145
+ }
146
+
147
+ }
148
+
149
+ ```

1

誤字の訂正

2018/04/29 07:56

投稿

退会済みユーザー
test CHANGED
File without changes
test CHANGED
@@ -54,7 +54,7 @@
54
54
 
55
55
  特に最初、7で割ったときの余りをそれぞれ数えるところでデータの個数がN個の時
56
56
 
57
- 2重for文で N * 6回もループするのでループする回数を減らすことができたら、さらに効率よく求まると思いました。しかし、他の方法は全く思いつかず,これが今の精一杯です。
57
+ 2重for文で N * 7回もループするのでループする回数を減らすことができたら、さらに効率よく求まると思いました。しかし、他の方法は全く思いつかず,これが今の精一杯です。
58
58
 
59
59
  どなたか、もっと効率の良い方法がありましたら、ご教授できないでしょうか?
60
60