Ex08Ans
From Prog0
演習第 8 回 解答
Contents |
解答例
A問題
A-1 つるかめむし算問題の再定義
ファイル名: ex08a1.txt
- 与えられた情報
- 鶴、亀、てんとう虫があわせて 20
- 足の合計本数は ashi_total
- 与えられていないが常識として知っている情報
- 鶴の足は 2 本
- 亀の足は 4 本
- てんとう虫の足は 6 本
- 足の数、個体数ともに自然数
- 求めるもの
- 鶴、亀、てんとう虫はそれぞれ何羽・匹いるか
A-2 つるかめむし算問題のフローチャート
ファイル名: ex08a2.pdf
B問題
B-1 つるかめむし算プログラム
ファイル名: ex08b1.c
#include <stdio.h>
/* 足の本数をマクロ定義 マクロは第9回に出てくる(それまでは定数でもよい) */
#define TURUASHI 2
#define KAMEASHI 4
#define MUSHIASHI 6
int main()
{
int turu, kame, mushi;
int total = 20;
int ashi;
int ashi_total;
int found_flag = 0;
printf("Input ashi (total): ");
scanf("%d", &ashi_total); // 足の合計本数を入力
for (turu = 0; turu <= total; turu++)
{
for (kame = 0; kame <= total - turu; kame++)
{
mushi = total - turu - kame;
ashi = turu*TURUASHI + kame*KAMEASHI + mushi*MUSHIASHI;
if (ashi == ashi_total)
{
printf("Turu:%d(%d)\tKame:%d(%d)\tTentoumushi:%d(%d)\n",
turu, turu*TURUASHI, kame, kame*KAMEASHI, mushi, mushi*MUSHIASHI);
found_flag++;
}
}
}
if (found_flag == 0)
printf("NOT found!\n"); // 解なし
return 0;
}
B-2 フィボナッチ数列
ファイル名: ex08b2.c
#include <stdio.h>
int main()
{
int fib[20];
int i;
fib[0] = 1;
fib[1] = 1;
for (i = 0; i < 18; i++)
fib[i + 2] = fib[i] + fib[i + 1];
for (i = 0; i < 20; i++)
printf("%5d\n", fib[i]);
return 0;
}
B-3 完全数
ファイル名: ex08b3.c
#include <stdio.h>
int main()
{
int n, d, sum;
for (n=1; n<=10000; n++) {
sum = 0;
for (d=1; d<=n/2; d++) {
if (n % d == 0) sum += d;
}
if (n == sum)
printf("%d は完全数です\n", n);
}
return 0;
}

