私はこれに新しいですが、私はいくつかの助けを得ることができたと思っていました。数学に基づいたアルゴリズム
次のようにだから私は、与えられた問題は、次のとおりです。明確な正の整数のリストを考えると
、2つの正の整数a、bが表すのリストを返す関数を書きます。 a/bの比率は最後の整数の半径の2倍にする必要があります。
与えられた[4,30,50]とは、4から30までの距離が26で、30から50までの距離が20であることを示しています。最初の半径は最後の半径の2倍です。これに対する解決策は、最初の半径は12であり、2番目の半径は14であり、最後は6です。最後のものは最初の半径の半分です。 12 + 14 = 26、14 + 6 = 20と同様に。だから、すべての歯車は互いに動くだろう。解[-1、-1]が返されないとすれば、[4,17,50]のようなものは解を持たないでしょう。
私はチェックのために使用しようとしているコードですが、間違いなく実行しません。
public static int[] answer(int[] pegs)
{
int[] noSolution = [-1,-1];
int[] results = new int[2];
int secondGear = pegs[1];
int firstGear = pegs[0];
int maxRadius = secondGear - firstGear;
int checkRadius = 0;
while(checkRadius < maxRadius)
{
int distance = maxRadius;
int changingRadius = distance - checkRadius; //Using this to get varying radii to see which one works
for(int i =1; i<pegs.length-1;i++)
{
distance = pegs[i+1] - pegs[i];
if(changingRadius >= distance)
{
break;
}
else
{
changingRadius = distance - changingRadius // Given that our radius is less than the distance
// let's continue to check if it is the same for the other distances
}
}
if((changingRadius*2) == checkRadius)
{
break; // Should be the case we found the right radius
}
checkRadius++; // Didnt find the right one, increment and test a new radius
これはかなり困惑しているので、助けが必要です。
私はあなたが数学でやっていることを理解していると思います。しかし、もし私が[4,30,35,50]のようなものを与えるならば。それから私は同じアプローチを使用して間違った答えを得ているようです。あなたが私がちょうど与えたセットでこのアプローチを私たちにできる方法を説明する気にしないならば。私は答えが12でなければならないと信じています。 – GreenSkies
あなたは何を言っていたのか分かりません。私は今すぐ自分のコードに実装する必要があります。どうもありがとうございました – GreenSkies