您的位置:首页 > 大数据 > 人工智能

codeforces 134B B. Pairs of Numbers(枚举+辗转相除)

2015-08-28 16:15 736 查看

题目链接:

codeforces 134B

题目大意:

给出一个数对(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 );
    }
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: