0
0

解いてみた。「Sランク:mod7占い」

Last updated at Posted at 2024-08-20

問題

「Sランク:mod7占い」

コード

Javaで解いてみました。

import java.util.*;

public class Main {
    public static void main(String[] args) {

        Scanner sc = new Scanner(System.in);
        int nN = sc.nextInt();
        
        // カード読み込み
        int[] anA = new int[nN];
        for (int i = 0; i < nN; i++) {
            anA[i] = (int)(sc.nextLong() % 7);
        }

        // カード検索
        int nCount = 0;
        for (int i = 0; i < (nN - 2); i++) {
            int a = anA[i];
            for (int j = (i + 1); j < (nN - 1); j++) {
                int b = anA[j];
                for (int k = (j + 1); k < nN; k++) {
                    int c = anA[k];
                    if (((a + b + c) % 7) == 0) {
                        nCount++;
                    }
                }
            }
        }

        // 結果出力
        System.out.println(nCount);
    }
}

解説

標準入力からの数値の読み取り

Scanner インスタンスを作り、nextInt()メソッドで数値を取得しています。

カード読み込み

配列 anA[] にカードの番号を入れますが、

  • そのまま足して、7で割った余りを求める
  • あらかじめ7で割った余りを足して、7で割った余りを求める

の結果は同じになるので、あらかじめ7で割った余りを格納しています。

カード検索

まず、0 〜 (N-1)-2(2枚選べるように残す為2を引く)番目のカードから、i番目のカードを1枚目として選びます。
次に、i+1 〜 (N-1)-1(1枚選べるように残す為1を引く)番目のカードから、j番目のカードを2枚目として選びます。
最後に、j+1 〜 N-1 番目のカードから、k番目のカードを3枚目として選びます。
すると、重複しない3枚組のカードを全て選ぶことができます。

あとは、3枚のカード anA[i], anA[j], anA[k]の数を足し、7で割った余りが0ならば、nCount を1増やしていきます。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0