#define _CRT_SECURE_NO_WARNINGS // Visual Studio only
#include <stdio.h>

// 鶴亀算
// 戻り値 0:解がある 1:解がない
int turu_kame_zan(int *turu, int *kame, int tosu, int asi) {
/*
下の方程式を解く
1*_turu + 1*_kame = tosu
2*_turu + 4*_kame = asi
行列式は
det = 1*4 - 2*1 = 2
食う。ラーメンの恋しい季節。というわけで
クラーメルの公式
_turu = | tosu 1 | / det = (tosu*4 - asi*1) / 2
        | asi  4 |

_kame = | 1 tosu | / det = (1*asi - 2*tosu) / 2
        | 2 asi  |
*/
    if (asi % 2 == 1) return 1; // 足の数が奇数の場合は解がない
    int _turu = (tosu*4 - asi*1) / 2;
    int _kame = (1*asi - 2*tosu) / 2;
    if (_turu < 0 || _kame < 0) return 1;
    *turu = _turu;
    *kame = _kame;
    return 0;
}
int main(void) {
    int turu, kame, tosu, asi;

    printf("足の合計? ");
    scanf("%d", &asi);
    printf("鶴亀の合計? ");
    scanf("%d", &tosu);
    if (turu_kame_zan(&turu, &kame, tosu, asi))
        printf("解はありません。\n");
    else
        printf("鶴:%d 亀:%d\n", turu, kame);
}

