每日刷题(二十八)
1.Fibonacci数列
这个题千万不要用递归做,因为递归只适合做小点的数据,这里的数据范围很大,而递归一旦面对大的数据只会耗费大量内存,速度慢,因为要形成很多栈空间。
正确的方法是用非递归方式处理
#include<stdio.h>
int main()
{
int i = 1, j = 1, sum = 0;
int n, t;
scanf("%d",&n);
if(n == 1 || n == 2)
{
printf("1");
return 0;
}
for(t = 3; t <= n; t++)
{
sum = (i + j) % 10007;
i = j % 10007;
j = sum % 10007;
}
printf("%d\n", sum);
return 0;
}
2.圆的面积
这里也没有难度,这里推荐大家使用一个直接可以的出π数值的方法,用头文件math.h中的atan,π = atan(1.0) * 4,因为他没有明确指出输入数字的类型,所以这里我统一用double型,详细C代码如下:
#include<stdio.h>
#include<math.h>
int main()
{
double PI = atan(1.0) * 4;
double r;
scanf("%lf",&r);
printf("%.7lf\n", PI * r * r);
return 0;
}
3.序列求和
这里数字范围规定得更大,都到十亿了,所以我们必须要用long long型才能攻克这道题,同时如果输入时十亿,那么以这个数量级会耗费很长时间,所以这里可以考虑“二分“,详细代码如下:
#include<stdio.h>
int main()
{
long long n, sum = 0, i, t, j;
scanf("%lld", &n);
t = n / 2;
for(i = 1; i <= t; i++)
sum += i;
for(j = t + 1; j <= n; j++)
sum += j;
printf("%lld\n", sum);
return 0;
}
4.A+B问题
这个简直就是在侮辱智商的题目,根本不算题目!!!
C代码:
#include <stdio.h>
int main()
{
int a, b;
scanf("%d%d", &a, &b);
printf("%d", a+b);
return 0;
}
C++代码:
#include <iostream>
using namespace std;
int main()
{
int a, b;
cin >> a >> b;
cout << a + b;
return 0;
}
Java代码:
import java.util.*;
public class Main
{
public static void main(String args[])
{
Scanner sc = new Scanner(System.in);
Integer a = sc.nextInt();
Integer b = sc.nextInt();
System.out.println(a + b);
}
}