2018.07.10【2018提高组】模拟C组:数字对
题目描述:
对于一个数字对(a, b),我们可以通过一次操作将其变为新数字对(a+b, b)或(a, a+b)。
给定一正整数n,问最少需要多少次操作可将数字对(1, 1)变为一个数字对,该数字对至少有一个数字为n。
输入输出:
Input
第一行一个正整数 n
Output
一个整数表示答案。
Sample Input
5
Sample Output
3
Data Constraint
对于30%的数据, 1 <= n <= 1000
对于60%的数据, 1 <= n <= 20000
对于100%的数据,1 <= n <= 10^6
思路:(a,a%b)→step+(a/b)
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cmath>
using namespace std;
int n,ans;
int dfs(int x,int y)
{
if (y==1)
return x-1;
if (!y) return 233333333;
return x/y+dfs(y,x%y);
}
int main()
{
scanf("%d",&n);
ans=233333333;
for (int i=1;i<n;i++)
ans=min(ans,dfs(n,i));
printf("%d",ans);
}