Submission #2175686
Source Code Expand
#include<stdio.h> #include<string.h> #include<stdlib.h> #include<math.h> #include<stdbool.h> const int MAX_N = 100; const int BACK = 0; const int FRONT = 1; void permutations(int n, int ary_coin[]); void perm_sub(int n, int m, int ary_coin[]); void print_perm(int n, int coin_buffer[]); int coin_buffer[MAX_N + 1]; bool used[MAX_N + 1]; int denominator = 0; int molecule = 0; int main(void) { int N; int ary_coin[MAX_N + 1]; double expected_value = 0; // 配列の初期化 for(int i = 0; i < MAX_N + 1; i++) { coin_buffer[i] = 0; used[i] = false; } scanf("%d", &N); for(int i = 0; i < N; i++) { scanf("%d", &ary_coin[i]); } permutations(N, &ary_coin[0]); // 期待値の演算 expected_value = (double)molecule / (double)denominator; printf("%lf", expected_value); return 0; } void permutations(int n, int ary_coin[]) { perm_sub(n, 0, &ary_coin[0]); } void perm_sub(int n, int m, int ary_coin[]) { if (n == m) { print_perm(n, &coin_buffer[0]); } else { for (int i = 0; i < n; i++) { if (used[i]) continue; coin_buffer[m] = ary_coin[i]; used[i] = true; perm_sub(n, m + 1, &ary_coin[0]); used[i] = false; } } } void print_perm(int n, int coin_buffer[]) { // 表と裏を管理する配列 // 0 : 裏, 1 : 表 int back_front[MAX_N + 1]; // 配列の初期化 for(int i = 0; i < MAX_N + 1; i++) { back_front[i] = FRONT; } for(int i = 0; i < n; i++) { for(int j = i + 1; j < n; j++) { if( coin_buffer[j] % coin_buffer[i] == 0 ) { // コインに対応する倍数が見つかった時 if( back_front[j] == FRONT ) { back_front[j] = BACK; } else { back_front[j] = FRONT; } } } } // 期待値の分子となる値を計算する for(int i = 0; i < n; i++) { molecule += back_front[i]; } // 期待値の分母となる、順列の場合の数を足しておく denominator++; }
Submission Info
Submission Time | |
---|---|
Task | C - コイン |
User | omisima |
Language | C (GCC 5.4.1) |
Score | 0 |
Code Size | 2409 Byte |
Status | CE |
Compile Error
./Main.c:15:6: error: variably modified ‘coin_buffer’ at file scope int coin_buffer[MAX_N + 1]; ^ ./Main.c:16:6: error: variably modified ‘used’ at file scope bool used[MAX_N + 1]; ^ ./Main.c: In function ‘main’: ./Main.c:34:5: warning: ignoring return value of ‘scanf’, declared with attribute warn_unused_result [-Wunused-result] scanf("%d", &N); ^ ./Main.c:38:9: warning: ignoring return value of ‘scanf’, declared with attribute warn_unused_result [-Wunused-result] scanf("%d", &ary_coin[i]); ^