#include <stdio.h>
int main(void){
int i,j,k;
for(i=100/3;i>0;i--)
for(j=100/2;j>0;j--)
for(k=100;k>0;k-=2){
if(((i+j+k)==100)&&((3*i+2*j+k/2 )== 100))
printf("%d ,%d ,%d\n", i,j,k);
}
return 0;
}
樓上的說我剛才邏輯錯誤,其實不然,因為34*3>100所以如果取上值的話,是超過100的,所以直接取下值。
妳說邏輯,那我們從邏輯上來論證:
設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存在的集合,不在取值範圍之列。
仔細思考再下結論