题目地址:https://codeforces.com/problemset/problem/1368/A
题意:
定义一个操作为:“ += ",如 a += b ,即 a = a + b,求最小的操作次数使 make the value of either a or b strictly greater than a given value n.
思路:
要求最小次数,那必然是使得每次 a += b 中 a 值达到最大,从而保证每一步都最大化程度逼近n
显然,对于a,b可以 min(a,b) += max(a,b),从而使得单步长最大化,then 不断循环即可。
按照上方的思路,只需要将 “+=” 操作完后的最大值与n进行比较,如果max(a,b) > n,循环终止,结束。
AC代码:
#include<bits/stdc++.h> using namespace std; typedef long long ll; int main(){ // freopen("x.txt","r",stdin); int t; cin >> t; ll a,b,n; while(t--){ cin >> a >> b >>n; int all = 0; if(a > b) // 保证 a < b,b是较大值 swap(a,b); while(b <= n){ a += b; if(a > b){ swap(a,b); } all++; } cout << all << endl; } return 0; }