解决递归的不行
斐波那契数列
#include<stdio.h>
#define MAX 1000000007
int main()
{
long n;
scanf("%ld",&n);
long f1=1;
long f2=1;
for(long i=1;i<n;i++)
{
long flag=f2;
f2=(f1+f2)%MAX;
f1=flag;
}
if(n!=0)printf("%ld\n",f1);
else printf("0\n");
}
楼梯走法
题目描述
楼梯有n阶,可以一步上一阶、两阶或三阶,问有多少种不同的走法
由于答案很大,mod(1e9+7)输出
输入数据
一个正整数n,代表楼梯的阶数,n<=1000000
输出数据
方案数
样例输入
3
样例输出
4
#include<stdio.h>
#define MAX 1000000007
int main()
{
long n;
scanf("%ld",&n);
long long a[1000000];
a[1]=1;
a[2]=2;
a[3]=4 ;
if(n==1) printf("%lld\n",a[1]);
else if(n==2) printf("%lld\n",a[2]);
else if(n==3) printf("%lld\n",a[3]);
else
{
for(long i=4;i<=n;i++)
{
a[i]=(a[i-1]+a[i-2]+a[i-3])%MAX;
}
printf("%lld\n",a[n]);
}
}
爱屋及乌
题目描述
李老师的lucky number 是3,5和7,他爱屋及乌,还把所有质因数只有3,5,7的数字认定为lucky number,比如9, 15, 21, 25等等。请聪明的你帮忙算一算小于等于x的lucky number有多少个?
输入数据
一个正整数x,3=<x<=1000000000000
输出数据
小于等于x的lucky number的个数。
样例输入
49
样例输出
11
#include<stdio.h>
typedef long long ll;
int main() {
ll x;
scanf("%lld",&x);
int sum = -1;
for(ll i = 1; i<= x; i *= 7){
for(ll j = i; j <= x; j *= 5) {
for(ll k = j; k <= x; k *= 3){
sum++;
}
}
}
printf("%d\n",sum);
return 0;
}