2010网易有道编程挑战赛--练习赛
去年参加了网易公司的“有道难题”编程大赛,当时是在Topcoder平台举行,由于当时自己第一次参加这样的比赛连资格赛都没有过,2个题目完成一个,剩下另一个时间已经来不及了,今年网易公司又举行了“有道难题”编程大赛,我再次报名了,这次的目标争取过资格赛吧。看了一下这次的练习赛题目,感觉不是太难,由于错过了练习赛比赛的时间,我将自己的答案写在这里,供大家参考一下吧,个人水平有限,如有错误或更好的方法,请指正。谢谢!
题目A: A + B
- 描述
- 计算a加b。
- 输入
- 一行,用空格分开的两个整数a和b。其中0≤a, b≤10000。
- 输出
- 一个整数,为a加b的和。
- 样例输入
-
1 2
- 样例输出
-
3
- 答案(GNU C)
-
#include <stdio.h>
int main()
{
int a,b;
scanf("%d %d",&a, &b);
printf("%d\n",a+b);
return 0;
}
题目B:Power
- 描述
- 计算a的b次方对9907取模的值。
- 输入
- 第一行有一个正整数T,表示有T组测试数据。
接下来T行,每行是一组测试数据,包含两个整数a和b。
其中T<=10000, 0 <=a,b < 2^31。 - 输出
- 有T行,依次输出每组数据的结果。
- 样例输入
-
3 1 2 2 3 3 4
- 样例输出
-
1 8 81
- 答案(GNU C)
-
代码#include <stdio.h>
#include <math.h>
int main()
{
int length, i, a, b, z;
scanf("%d",&length); //get length
int r[length]; //result array
for(i=0;i<length;i++)
{
scanf("%d %d", &a, &b);
z = pow(a,b);
r[i] = z % 9907;
}
for(i=0;i<length;i++)
{
printf("%d\n",r[i]); //output result
}
return 0;
}
题目C:Sibonacci
- 描述
- 菲波那切数列可以用下列的式子表示:
f(1)=1
f(2)=1
f(n)=f(n-1)+f(n-2) (n>=3)
现在我们根据这个规则定义另一种数列 命名为"辛波那切数列", 它是这样定义的:
s(x)=0 (x<0)
s(x)=1 (0<=x<1)
s(x)=s(x-1)+s(x-3.14) (x>=1)
现在需要计算出s(x) MOD 1000000007的值。 - 输入
- 第一行有一个正整数T表示有T组测试数据。
接下来T行,每行包含一个数x。
其中 T<=10000, -1000.0<=x<=1000.0 - 输出
- 有T行,依次输出每组数据的结果。
- 样例输入
-
3 -1 0.667 3.15
- 样例输出
-
0 1 2
- 答案(GNU C)
-
代码#include <stdio.h>
#include <math.h>
float sibonacci(float x)
{
return (x<0)? 0 : (0 <= x && x < 1) ? 1 : sibonacci(x-1) + sibonacci(x-3.14);
}
int main()
{
int length, i;
float z, x;
scanf("%d",&length); //get length
int r[length]; //result array
for(i=0;i<length;i++)
{
scanf("%f", &x);
z = sibonacci(x);
r[i] = fmod(z,1000000007);
}
for(i=0;i<length;i++)
{
printf("%d\n",r[i]); //output result
}
return 0;
}
<br/ />如果有任何问题希望与我交流。