這是經典的"百馬百擔"問題,有一百匹馬,馱一百擔貨,大馬馱3擔,中馬馱2擔,兩隻小馬馱1擔,問有大,中,小馬各幾匹?
原理簡介,詳細內容,
原理簡介
數學上有百馬百擔,有一百匹馬,一百擔貨,大馬馱三擔,中馬馱二擔,兩匹小馬馱一擔,問大中小馬各多少匹?
試編程求此數學問題。(用C語言編程)
設r = [a/b]+1, 其中a為擔總數, b為每馬擔數
則當[a/b] = a/b時, 有 r = a/b + 1, r> a/b
當[a/b] < a/b 時, 因為 0 < a/b - [a/b] < 1, 有 a/b < [a/b] + 1 = r, 即 r > a/b
綜上: r > a/b
又:a/b * b = a, 則 必有 r * b > a
根據提設條件對於任意的大馬個數x, 有 x*b <= a
因此 r不屬於x存在的集合,不在取值範圍之列。
用for循環列舉,並用if語句判斷符合題意的結果
詳細內容
語言的"百馬百擔"實現代碼:
#include <stdio.h>
void main()
{
int big,mid,small,sum=0;
for(big=0;big<33;big++)
for(small=0;small<100;small+=2)
for(mid=0;mid<50;mid++)
{
if(3*big+2*mid+small/2==100&&big+mid+small==100)
{
printf("big:%d\tmid:%d\tsmall:%d\n",big,mid,small);
sum++;
}
}
printf("%d\n",sum);
}
結果為大中小馬:
2 30 68
5 25 70
8 20 72
11 15 74
14 10 76
17 5 78
20 0 80