1. 程式人生 > >C語言 百錢買白雞問題

C語言 百錢買白雞問題

“公雞三文一隻,母雞兩文一隻,小雞一文三隻”

(495000 Times)

#include <stdio.h>
#include <stdlib.h>

int main()
{
    int i, j, k, sum = 0;
    for(i = 1; i <= 33; i++)
    {
        for(j = 1; j <= 50; j++)
        {
            for(k = 1; k <= 300; k++)
            {
                sum++;/*if(i * 3 + j * 2 + k / 3 == 100 && i + j + k == 100 && k % 3 == 0)
                    sum++;//printf("公雞%d\n母雞%d\n小雞%d\n", i, j, k);*/
            }
        }
    }
    printf("%d", sum);
    return 0;
}

可以簡化為雙重迴圈(1650 Times)

#include <stdio.h>
#include <stdlib.h>

int main()
{
    int i, j, k, sum = 0;
    for(i = 1; i <= 33; i++)
    {
        for(j = 1; j <= 50; j++)
        {
                k = 100 - i - j;//if(i * 3 + j * 2 + k / 3 == 100 && i + j + k == 100 && k % 3 == 0)
                    sum++;
        }
    }
    printf("%d", sum);
    return 0;
}

i 確定時 j 的範圍可以進一步確定(800 Times) 

#include <stdio.h>
#include <stdlib.h>

int main()
{
    int i, j, k, sum = 0;
    for(i = 1; i <= 33; i++)
    {
        for(j = 1; j <= (100 - 3 * i) / 2; j++)
        {
                k = 100 - i - j;//if(i * 3 + j * 2 + k / 3 == 100 && i + j + k == 100 && k % 3 == 0)
                    sum++;
        }
    }
    printf("%d", sum);
    return 0;
}

兩式聯立可得:i = 25 - 5/8 * j,所以 j = 8、16、24、32,i = 20、15、10、5.(4 Times)

#include <stdio.h>
#include <stdlib.h>

int main()
{
    int i, j, k, sum = 0;
    for(i = 5, j = 32; i <= 20; i += 5, j -= 8)
    {
                k = 100 - i - j;
                sum++;
    }
    printf("%d", sum);
    return 0;
}