题目链接:
题目大意:
给出一个数对(1,1),最少用多少次能通过a=a+b或b=a+b的操作变成其中一个数是n的数对。
题目分析:
暴力做,枚举数对中除n外的另一个数,然后辗转相除,每布操作一定是大的减小的,一直到1为止逆着做,然后比较得到最小次数,通过除法得到次数,通过取模得到下一种状态。
AC代码:
#include <iostream>
#include <algorithm>
#include <cstring>
#include <cstdio>
using namespace std;
int n;
int ans,temp;
void dfs ( int a, int b )
{
if ( b == 0 )
{
temp = n;
return;
}
if ( b == 1 )
{
temp += a-1;
return;
}
temp += a/b;
dfs ( b , a%b );
}
int main ( )
{
while ( ~scanf ( "%d" , &n ) )
{
ans = n-1;
for ( int i = 1 ; i < n ; i++ )
{
temp = 0;
dfs ( n , i );
ans = min ( ans , temp );
}
printf ( "%d\n" , ans );
}
}