Also habe ich versucht, ein Problem zu lösen, bei dem Sie feststellen, ob zwei Kängurus irgendwann auf dem gleichen Punkt landen die gleiche Zeit gegeben, dass man an der Position x1
beginnt und reist Entfernung v1
pro Hop, und die anderen x2
und v2
für die Messung derselben.Wo ist mein Fehler bei der Bestimmung, ob es ein int N gibt, also x1 + v1 * N = x2 + v2 * N
Beispiel:
Eingang 0 3 4 2
bedeutet x1=0
, v1=3
, x2=4
, v2=2
. Sie werden schließlich auf dem gleichen Punkt landen, weil ihre Entfernungen von dem Start und nach jedem Sprung sind wie
0 -> 3 -> 6 -> 9 -> 12
4 -> 6 -> 8 -> 10 -> 12
Meine Lösung einiger Testfälle versagt und ich frage mich, wo der Fehler in der Logik meines OS (1) Lösung:
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
class Solution
{
static void Main(String[] args) {
string[] tokens_x1 = Console.ReadLine().Split(' ');
int x1 = Convert.ToInt32(tokens_x1[0]);
int v1 = Convert.ToInt32(tokens_x1[1]);
int x2 = Convert.ToInt32(tokens_x1[2]);
int v2 = Convert.ToInt32(tokens_x1[3]);
// What needs to be determined is whether there exists an N such that
// x1 + v1 * N = x2 + v2 * N
// or, equivalenly,
// (x1 - x2) = (v2 - v1) * N
double ndouble = ((double)x1 - (double)x2)/((double)v2 - (double)v1);
Console.WriteLine(ndouble == (int)ndouble ? "YES" : "NO");
}
}
Vorsicht für durch Nullen – samgak