題目鏈接:https://codeforc.es/problemset/problem/134/B
題目大意:假定我們有一個數對,我們可以得到下一個新的數對或者,初始數對爲,問要得到一個數對中要有一個值爲,至少需要多少次操作。
思路:的範圍只是在,所以我們可以假定答案爲,暴力枚舉,每次類似於輾轉相除法的形式計算次數。
AC代碼:
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int nn;
void dfs(int n,int m,int & cnt)
{
if(m==1){//初始情況下,n是從1每次加1得到n的
cnt+=n-1;
return ;
}
if(m==0){//這種情況是不合法的,cnt賦不合法值直接返回
cnt=nn;
return ;
}
cnt+=n/m;
n%=m;
dfs(m,n,cnt);
}
int main()
{
cin>>nn;
int ans=nn-1;
for(int i=1;i<nn;i++){
int cnt=0;
dfs(nn,i,cnt);
ans=min(ans,cnt);
}
cout<<ans<<endl;
return 0;
}