寝癖頭の解法

学習中の覚え書きを投稿、更新していきます。

C言語による鶴亀算

C言語による鶴亀算のプログラムです。
Xcode上で、動作を確認しました。
鶴亀算は、ウィキペディアから引用すれば、算数の文章題、またその解き方の一種です。
https://ja.wikipedia.org/wiki/鶴亀算
歴史としては、中国の数学書孫子算経』にある、「雉兎同籠」が始まりとされて、それが江戸時代におめでたい動物とされるツルとカメに置き換えられて、この名前になったのだそうです。
数学としては、xをツルの数、yをカメの数、aをツルとカメの個体数の総和、bを足の本数の総和とおくと、
   x+y=a
   2x+4y=b
の2元1次連立方程式で表せます。
また算数としては、鶴の数=(鶴と亀の個体数の総和x4-足の本数の総和)÷(4-2)のように表せます。
いずれにしても解法の考え方は、すべてがどちらか一方であるとして解きます。
それから鶴亀算には、鶴と亀が出てこなかったり、動物ではないような類題も多くあります。
そのため本プログラムにおいては、2つの選択肢を用意しました。
1.鶴と亀の場合
2.他の動物の場合
次に、それぞれの入力値から鶴亀算を計算し、その結果を表示します。
結果表示後に、もう一度計算し直す場合は継続し、そうでなければ終了します。

/*
 C言語による鶴亀算
 https://neguse-atama.hatenablog.com
*/
#include <stdio.h>
int main(void){
    int clane_turtle_individual,clane_turtle_totalfeet,clane_answer,turtle_answer;
    int all_individual,individual1,individual2,total,difference,quantity1,quantity2;
    int number,again;
    do{
        printf("鶴亀算を計算します。\n");
        printf("1.鶴と亀の場合\n2.他の動物の場合\n");
        printf("以上から1,2のどちらかを選び、入力してください:");
        scanf("%d",&number);
        if(number==1){
            printf("鶴と亀の個体数の総和を入力してください:");
            scanf("%d",&clane_turtle_individual);
            printf("足の本数の総和を入力してください:");
            scanf("%d",&clane_turtle_totalfeet);
            clane_answer=(clane_turtle_individual*4-clane_turtle_totalfeet)/(4-2);
            turtle_answer=clane_turtle_individual-clane_answer;
            printf("求める鶴の数は%d羽、また求める亀の数は%d頭です。\n",clane_answer,turtle_answer);
        }else if(number==2){
            printf("2種の動物の個体数の総和を入力してください:");
            scanf("%d",&all_individual);
            printf("2種の動物のそれぞれの足の本数を入力してください\n");
            printf("一種は:");
            scanf("%d",&individual1);
            printf("もう一種は:");
            scanf("%d",&individual2);
            printf("足の本数の総和を入力してください:");
            scanf("%d",&total);
            difference=total-all_individual*individual1;
            if(individual1>individual2){
                quantity1=difference/(individual1-individual2);
                quantity2=all_individual-quantity1;
                printf("一方の個体数は%d、もう一方の個体数は%dです。\n",quantity1,quantity2);
            }else if(individual1<individual2){
                quantity2=difference/(individual2-individual1);
                quantity1=all_individual-quantity2;
                printf("一方の個体数は%d、もう一方の個体数は%dです。\n",quantity1,quantity2);
            }
        }else if(number!=1 && number!=2){
            printf("1,2以外の数を入力しないでください。\n");
        }
        printf("計算をやり直しますか。・・・(0)はい (1)いいえ:");
        scanf("%d",&again);
    }while(again==0);
    return (0);
}

中学の入試問題や進学塾などで出題される特殊算の中から、鶴亀算について考えてみました。
文章題としての出題になりますが、数学においては連立方程式の初歩問題と言えます。
また面積図としては、縦を1匹の足の数、横を頭数、面積を足の数とすることで、それぞれの個体数を求められます。
それから動物ではない例としては、ミカンとリンゴの値段、総和、合計金額から求めるような出題もあります。