数字のペア(a、b)があるとしましょう。与えられたペアから(a + b、b)または(a、a + b)の新しいペアを一度に得ることができます。数字のペアから数値を作る最小ステップを見つけよう
最初の数字のペアを(1,1)とします。私たちの仕事は、少なくとも1つの数字がnに等しいペアに(1,1)を変換するのに必要なステップ数を見つけることです。 私は可能なすべてのペアを見つけて解決し、与えられた数が形成されている最小ステップを返しますが、計算にかなりの時間がかかります。これは何とかgcdを見つけることと関連しているに違いないと思います。私は概念のためのいくつかのリンク。 は、ここでの問題を解決するプログラムですが、それはあなたがこれを行うには幅優先探索アルゴリズムを使用することができます...私に
#include <iostream>
using namespace std;
#define INF 1000000000
int n,r=INF;
int f(int a,int b){
if(b<=0)return INF;
if(a>1&&b==1)return a-1;
return f(b,a-a/b*b)+a/b;
}
int main(){
cin>>n;
for(int i=1;i<=n/2;i++){
r=min(r,f(n,i));
}
cout<<(n==1?0:r)<<endl;
}
nの制約は何ですか?また、実際の手順や番号だけが必要ですか? –
@izomorphius nは5000未満であり、最小限のステップしか必要としません。 –
gcdとは何とか関係していますが、わかりません。 –