P2090 数字对
题目描述
对于一个数字对(a, b),我们可以通过一次操作将其变为新数字对(a+b, b)或(a, a+b)。
给定一正整数n,问最少需要多少次操作可将数字对(1, 1)变为一个数字对,该数字对至少有一个数字为n。
输入格式
第一行一个正整数 n
输出格式
一个整数表示答案。
输入输出样例 #1
输入 #1
5
输出 #1
3
说明/提示
样例解释:
(1,1) → (1,2) → (3,2) → (5,2)
对于30%的数据, 1 <= n <= 1000
对于60%的数据, 1 <= n <= 20000
对于100%的数据,1 <= n <= 10^6
C++实现
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cmath>
#include<cstring>
using namespace std;
int n,ans=0x3f3f3f3f;
int dfs(int x,int y,int step){
if(x==n||y==n){
ans=min(ans,step);
}
if(x+y<=n){
dfs(x+y,y,step+1);
dfs(x,x+y,step+1);
}
return ans;
}
int main(){
cin>>n;
cout<<dfs(1,1,0)<<endl;
return 0;
}

后续
接下来我会不断用C++来实现信奥比赛中的算法题、GESP考级编程题实现、白名单赛事考题实现,记录日常的编程生活、比赛心得,感兴趣的请关注,我后续将继续分享相关内容
2548

被折叠的 条评论
为什么被折叠?



