例題 3![]() 方針・アルゴリズムA, B, C の個数についてさまざまな組合わせを作り,その合計が x となるかどうかを試していけばよい. つまり,この問題は例題 1, 例題 2 と同様の(所定の等式が成立するかどうかをチェックする)問題に帰着できる.A, B, C の個数をそれぞれ a, b, c で表すと,次式が成立するような (a, b, c) を見つければよい: ![]() いま,b, c = 0 とおくと, ![]() 同様にして b の探索範囲は x/5 以下,c の探索範囲は x/9 以下となる.
コーディング例1 /* 2 * プログラミング演習 第 14 回 3 * [例題 3] 4 * (C) 2006 Hirohisa AMAN <aman@cs.ehime-u.ac.jp, aman@computer.org> 5 */ 6 #include <stdio.h> 7 8 int main(void){ 9 int x, a, b, c; 10 11 /* x を読み込む */ 12 printf("x = ? "); 13 scanf("%d", &x); 14 15 /* a, b, c を可能な範囲で変化させながら等号の成立をチェックする */ 16 for ( a = 0; a <= x/2; a++ ){ 17 for ( b = 0; b <= x/5; b++ ){ 18 for ( c = 0; c <= x/9; c++ ){ 19 20 if ( 2*a + 5*b + 9*c - x == 0 ){ 21 printf("%d %d %d\n", a, b, c); 22 } 23 24 } 25 } 26 } 27 28 return 0; 29 }
※左端の数字は行番号であり,ソースコードには含まれない点に注意!
コンパイル & 実行例$ gcc example14_3.c [Enter] $ ./a.out [Enter] x = ? 10 [Enter] 0 2 0 5 0 0 |