POJ做题笔记:1000,1004,1003

时间:2021-02-26 19:09:20

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个月的工资的平均数。
代码:

#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循环查找的;也可以使用二分查找,这样速度更快。
代码:

#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;
}