题目描述:
算法思想:
首先定义三个“指针”i,p2,p5,计算出2*p2+1,和5*p5-1,进行比较,按从小到大的顺序排好(有点像归并)
实现代码:
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;const int N = 1e6;
long long m[N];
int n,p2=1,p5=1;int main(){cin>>n;m[1] = 1;int sum = m[1];for(int i=2;i<=n;i++){int tmp2 = 2*m[p2]+1; int tmp5 = 5*m[p5]-1;if(tmp2>tmp5){m[i] = tmp5;p5++;}else if(tmp2<tmp5){m[i] = tmp2;p2++;}else{m[i] = tmp2;p2++;p5++;}sum+=m[i];} cout<<"m="<<m[n]<<" s="<<sum<<endl;return 0;
}
运行结果: