いくつかの数字が集まったデータあります。
例えば、{1,5,4,48,4,2,33,5,2,4,2,1,52,3,2,1,4}のような感じです。
ここから7の倍数となる3つの数字の組み合わせがいくつあるか数えたいです。
私の現在のベストな考え
(I)2重for文を使って7で割ったときの余りがそれぞれいくつかあるか数えます。
Java
1 //受け取ったデータを7で割った余りに変換しました。 2 int []count = new int[7]; 3 for(int i = 0; i < data.length; i++){ 4 for(int j = 0; j < 7; j++){ 5 if(data[i] == j){ 6 count[j]++; 7 } 8 } 9 }
(II)和が7の倍数となる組み合わせは
(i)(0 0 0), <-すべて同じ数字
(ii)(0 1 6),(0,2,5),(0,3,4),(1,2,4),(3,5,6) <-すべて異なる数字
(iii)(1,1,5),(1,3,3),(2,2,3),(2,6,6),(4,4,6),(4,5,5) <-数字の種類は2つ
のように12通りあります。
7で割った余りが0となる数字の個数がa個の場合
(i)の(0,0,0)は (a)(a - 1)(a - 2) / 6 通りと求めることができます。
(ii),(iii)も同様にして場合の数を高校数学I・Aで習った知識で求めることができます。
一応、これで組み合わせの個数を求めることはできますが、データが多くなると
非効率だと感じました。
特に最初、7で割ったときの余りをそれぞれ数えるところでデータの個数がN個の時
2重for文で N * 7回もループするのでループする回数を減らすことができたら、さらに効率よく求まると思いました。しかし、他の方法は全く思いつかず,これが今の精一杯です。
どなたか、もっと効率の良い方法がありましたら、ご教授できないでしょうか?
もしかしたら、根本から変えるべきかもしれません。
よろしくお願い致します。
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2018/04/29 09:06