Wir erhalten für jede Gerade die Zahl N und die Koordinaten der beiden Punkte (x1,y1) und (x2,y2). Das Ziel besteht darin, aus den gegebenen Geraden die maximale Anzahl an Geraden zu finden, die durch einen einzelnen Punkt verlaufen können, sodass sich keine zwei Geraden gegenseitig überdecken und keine Drehung durchgeführt wird.
Wir stellen die gerade Linie als (Paar) m,c) dar, wobei y=mx+c,m die Steigung m=y2-y1/x2-x1 ist.
Gegeben c1!=c2 sind Linien mit demselben m parallel zu. Wir berechnen verschiedene Steigungen in Metern. Wenn für eine vertikale Linie x1=x2, dann Steigung = INT_MAX, andernfalls m.
Lassen Sie es uns anhand von Beispielen verstehen.
Eingabe
Line 1 (x1,y1)=(4,10) (x2,y2)=(2,2) Line 2 (x1,y1)=(2,2) (x2,y2)=(1,1)
Ausgabe
Maximum lines: 2
Erklärung - Die Anzahl der Busse beträgt 2. Die Steigungen der beiden Linien sind unterschiedlich.
Eingabe
Line 1 (x1,y1)=(1,5) (x2,y2)=(3,2) Line 2 (x1,y1)=(2,7) (x2,y2)=(2,8)
Ausgabe
Maximum lines: 2
Beschreibung - Die Anzahl der Busse beträgt 2. Beide haben unterschiedliche Steigungen.
Integer-Arrays x1[] und x2[] werden zum Speichern der Koordinaten von Punkten auf der Linie verwendet.
Die Funktion numLines(int x1[],int y1[], int x2[], int y2[]) zählt die Anzahl der Linien, die durch einen einzelnen Punkt verlaufen.
Wenden Sie die Formel für jeden Punkt in x1[],y1[],x2[],y2[] an, um die Steigung zu berechnen, und verwenden Sie k, um die Steigungsanzahl zu erhöhen.
Das Array s[] speichert den Steigungswert.
>Gibt k als Anzahl der Zeilen im Ergebnis zurück.
Live-Demo
#include <stdio.h> int numLines(int n, int x1[], int y1[], int x2[], int y2[]){ double s[10]; int k=0; double slope; for (int i = 0; i < n; ++i) { if (x1[i] == x2[i]) slope = 999; else slope = (y2[i] - y1[i]) * 1.0 / (x2[i] - x1[i]) * 1.0; s[k++]=slope; } return k; } int main(){ int n = 2; int x1[] = { 1, 5 }, y1[] = { 3, 2 }; int x2[] = { 2,7 }, y2[] = { 2, 8 }; printf("Maximum lines: %d", numLines(n, x1, y1, x2, y2)); return 0; }
Wenn wir den obigen Code ausführen, wird die folgende Ausgabe generiert:
Maximum distinct lines passing through a single point : 2
Das obige ist der detaillierte Inhalt vonMaximale Anzahl unterschiedlicher Geraden durch einen Punkt in C. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!