Ex08Ans

From Prog0

Jump to: navigation, search

演習第 8 回 解答

Contents

解答例

A問題

A-1 つるかめむし算問題の再定義

ファイル名: ex08a1.txt

  • 与えられた情報
    • 鶴、亀、てんとう虫があわせて 20
    • 足の合計本数は ashi_total
  • 与えられていないが常識として知っている情報
    • 鶴の足は 2 本
    • 亀の足は 4 本
    • てんとう虫の足は 6 本
    • 足の数、個体数ともに自然数
  • 求めるもの
    • 鶴、亀、てんとう虫はそれぞれ何羽・匹いるか

A-2 つるかめむし算問題のフローチャート

ファイル名: ex08a2.pdf

File:Ex08_turukamemushi.png

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;
}


Personal tools