POJ作題筆記:1000,1004,1003

1000 A+B Problem

題目大意:輸入兩個數a和b,輸出他們的和。
代碼:數組

#include <stdio.h>
int main()
{
    int a, b;
    while (scanf("%d%d" , &a, &b) != EOF) {
        printf("%d\n", a + b);
    }
    return 0;
}

1004 Financial Management

題目大意:告訴你Larry的12個月的工資,求這12個月的工資的平均數。
代碼:ci

#include <stdio.h>
double number[12], total = 0, average = 0;
int main()
{
    int i;
    for (i = 0; i < 12; i ++)
    {
        scanf("%lf", &number[i]);
    }
    for (i = 0; i < 12; i ++)
    {
        total += number[i];
    }
    average = total / 12.0;
    printf("$%.2f\n", average);
    return 0;
}

1003 Hangover

題目大意:給定一個長度len,求最小的一個知足"1/2+1/3+...+1/(n+1)>=len"的數n。
思路:開一個數組length[n]表示1/2+1/3+...+1/(n+1),而後對於每個len,查找最小的知足"length[n]>=len"的數n。
我這裏是for循環查找的;也可使用二分查找,這樣速度更快。
代碼:get

#include <stdio.h>
double length[500];
int cnt = 0;
void prepare()
{
    length[++cnt] = 1 / 2.0;
    int i;
    for (i = 3; i < 500; i ++)
    {
        cnt ++;
        length[cnt] += length[cnt-1] + 1 / (double)i;
        if (length[cnt] >= 5.20)
            break;
    }
}
int solve(double len)
{
    int i;
    for (i = 1; i <= cnt; i ++)
    {
        if (length[i] >= len)
            return i;
    }
}
int main()
{
    prepare();
    double len;
    while (scanf("%lf", &len) != EOF)
    {
        if (len <= .0)
            break;
        else {
            int number = solve(len);
            printf("%d card(s)\n", number);
        }
    }
    return 0;
}
相關文章
相關標籤/搜索