目录
例题1:兔子繁衍问题
一对兔子,从出生后第3个月起每个月都生一对兔子。小兔子长到第3个月后每个月又生一对兔子。假如兔子都不死,请问第1个月出生的一对兔子,至少需要繁衍到第几个月时兔子总数才可以达到N对?
输入格式:
输入在一行中给出一个不超过10000的正整数N。
输出格式:
在一行中输出兔子总数达到N最少需要的月数。
输入样例:
30
结尾无空行
输出样例:
9
#include<stdio.h>
int main()
{
int n,a=0,b=1,temp,m=1;
scanf("%d",&n);
while(b<n)
{
m++;
temp=a+b;
a=b;
b=temp;
}
printf("%d",m);
}
例题2:公式计算型
算完钱后,月落乌啼想着:“你 TMD 坑我,(以下用闽南语读)归粒靠杯靠亩诶,(以下用英读)是伊特游!”于是当爱与愁大神问多少钱时,月落乌啼说了一堆乱码。爱与愁大神说:“算了算了,我只问第n样菜价格多少?”月落乌啼写出了:
由于爱与愁大神学过编程,于是就用 11 分钟的时间求出了 F_nFn 的结果。月落乌啼为此大吃一惊。你能学学爱与愁大神求出 F_nFn 的值吗?
输入格式
一行一个自然数 nn。
输出格式
只有 11 行一个实数 F_nFn,保留两位小数。
输入输出样例
输入 #1复制
6
输出 #1复制
8.00
说明/提示
对于所有数据:0 \leq n\leq 480≤n≤48。
#include <stdio.h>
int main()
{
long long a = 1, b = 1;
int n, i;
double c = 0;
scanf("%d", &n);
for (i = 3; i <= n; i++)
{
c = a + b;
a = b;
b = c;
}
printf("%.2lf", c);
return 0;
}
核心代码:
temp = a+b;
a = b;
b = temp;
在循环中应用该模板,形成 2 3 5 8........。最终的b或者temp为最后一个数,多用于判断。
(a和b的值至少有一个为1)
#include <stdio.h>
int main(){
int a[100],i,n;
scanf("%d",&n);
a[1]=a[2]=1;
for(i=3;i<=n;i++)
a[i]=a[i-1]+a[i-2];
printf("%d",a[n]);
return 0;
}
(数组写法)
练一练手:
本题要求编写程序,计算序列 2/1+3/2+5/3+8/5+... 的前N项之和。注意该序列从第2项起,每一项的分子是前一项分子与分母的和,分母是前一项的分子。
输入格式:
输入在一行中给出一个正整数N。
输出格式:
在一行中输出部分和的值,精确到小数点后两位。题目保证计算结果不超过双精度范围。
输入样例:
20
结尾无空行
输出样例:
32.66
#include<stdio.h>
int main()
{
double t,r,a=1,b=1,a1=0,b1=1,s=0;
int n,i;
scanf("%d",&n);
for(i=0;i<n;i++)
{
r=a1+b1;
a1=b1;
b1=r;
t=a+b;
a=b;
b=t;
s=s+1.0*b/b1;
}
printf("%.2lf",s);
return 0;
}