Cの単一の点を通過する最大の個別の線
各線の数Nと2点(x1、y1)と(x2、y2)の座標が与えられます。目標は、2つの線が互いに重なり合ったり、回転が実行されたりしないように、1つの点を通過できる特定の線から最大数の線を見つけることです。
線を(m、c)のペアとして表します。ここで、y =mx + cであり、mは勾配m =y2-y1 / x2-x1
同じmの線は、c1!=c2で平行になります。明確な勾配(m)を数えます。垂直線の場合、x1 =x2の場合、勾配=INT_MAX、それ以外の場合はm。
入力
Line 1 (x1,y1)=(4,10) (x2,y2)=(2,2) Line 2 (x1,y1)=(2,2) (x2,y2)=(1,1)
出力
Maximum lines: 2
説明 −合計線は2です。どちらも勾配が異なります。
入力
Line 1 (x1,y1)=(1,5) (x2,y2)=(3,2) Line 2 (x1,y1)=(2,7) (x2,y2)=(2,8)
出力
Maximum lines: 2
説明 −合計線は2です。どちらも勾配が異なります。
以下のプログラムで使用されているアプローチは次のとおりです
-
整数配列x1[]およびx2[]は、線上の点の座標を格納するために使用されます。
-
関数numLines(int x1 []、int y1 []、int x2 []、int y2 [])は、単一のポイントを通過するラインの数をカウントしています。
-
x1 []、y1 []、x2 []、y2 []の各ポイントに数式を適用して勾配を計算し、kを使用して勾配カウントをインクリメントします。
-
配列s[]は勾配の値を格納します。
-
結果の行数としてkを返します。
例
#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; }
出力
上記のコードを実行すると、次の出力が生成されます-
Maximum distinct lines passing through a single point : 2
-
Cプログラムで指定されたサイズの最大和二乗部分行列を出力します。
NxNの行列が与えられた場合、行列MxMのすべての要素の加算が最大になるように、M=1であるMxMの部分行列を見つけます。行列NxNの入力には、ゼロ、正、および負の整数値を含めることができます。 例 Input: {{1, 1, 1, 1, 1}, {2, 2, 2, 2, 2}, {3, 3, 3, 3, 3}, {4, 4, 4, 4, 4}, {5, 5, 5, 5, 5} } Output: 4 4
-
Matplotlibの2本の線の交点である点を通過する水平線と垂直線をプロットします
ポイントを通過する水平線と垂直線をプロットするには、次の手順を実行できます 図のサイズを設定し、サブプロット間およびサブプロットの周囲のパディングを調整します。 勾配(m1、m2)と切片(c1とc2)を使用して2本の線を作成します。傾きを初期化し、値をインターセプトします。 numpyを使用してx個のデータポイントを作成します。 plot()を使用して、x、m1、m2、c2、およびc1のデータポイントをプロットします。 メソッド。 切片と勾配の値を使用して、交点を見つけます。 点線で水平線と垂直線をプロットします。 プロットにxiポイントとyiポイントをプロットします 図を表示するには、