题目
题解思路
首先 三角形成立的条件就是 任意两边之 和 大于第三边 我们取最坏的情况。
最小的两边小于等于第三边。
这样是不是有点斐波那契数列的感觉了。
刚好就是等于前两项之和。
看看行不行。
这样我们需要让第一层循环在不少于进入log2n(40左右)的情况下,斐波那契数列在int范围内有46个左右。
这样我们取前40个符合条件的数放入答案数组前面,后面取1即可。
AC代码
#include <bits/stdc++.h>
//#include <unordered_map>
//priority_queue
#define PII pair<int,int>
#define ll long long
using namespace std;
const int INF = 0x3f3f3f3f;
int dp[999] ;
int main()
{
ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
int n ;
cin >> n ;
dp[1] = 2 ;
dp[2] = 3 ;
for (int i = 3 ; i <= 40 ; i++ )
dp[i] = dp[i-1] + dp[i-2] ;
for (int i = 1 ; i <= min(40,n); i++ )
cout << dp[i] << " " ;
if ( n > 40 )
{
for (int i = 1 ; i <= n-40 ; i++ )
cout << "1 ";
}
cout << "\n" ;
return 0 ;
}