斜率,點和線段 zzuli1196數星星 二

2021-09-11 01:58:43 字數 1769 閱讀 6204

題目描述

一天,小明坐在院子裡數星星,gardon就出了個難題給他,讓他數數天上的星星最多有多少個是在同一條直線上的。天上的星星太多了,小明馬上就看花了眼,你能寫個程式來幫他計算麼?

輸入

首先輸入乙個整數n(n<=300),接下來的n對數每對表示乙個星星的位置(星星的座標在-10000到10000之間,精確到小數點後1位)。沒有兩個星星會在同乙個位置。

輸出

乙個整數,表示一條直線上最多星星的數目。

樣例輸入

50 0

1 01 1

0 10.5 0.5

樣例輸出

3分析與解

我以維根斯坦的論述方式來分析:

對於斜率,點,以及線段來說:

1.兩點確定一條直線,直線具有斜率

2.斜率可以取0到無窮

3.斜率為無窮時說明直線與y軸平行或重合

4.斜率為無窮時說明斜率公式中分母為零

5.斜率為無窮時,其值具有相對性:2−0

0−0和

−1−0

0−

0\frac和\frac

0−02−0

​和0−

0−1−

0​乙個是正無窮,乙個是負無窮,但是其都是在一條直線上的(y軸)。

6.共線問題建立在三個點的基礎之上

7.我們不能通過一般的斜率公式是否相等來斷定三個點是否共線

8.可以通過乘式判斷3點共線

( y3

−y1)

(x2−

x1)−

(y2−

y1)(

x3−x

1)=0

(y3−y1)(x2−x1)−(y2−y1)(x3−x1)=0

(y3−y1

)(x2

−x1)

−(y2

−y1)

(x3−

x1)=

09.n個點,每乙個點都能和剩下n-1個點組成線段

10.當每個點都不共線時,n個點組成的不同直線的個數最多

11.a點和b點組成線段也意味著b點和a點組成線段

12.n個點組成最多不同直線個數為n∗(

n−1)

2\frac

2n∗(n−

1)​

解題思路:

1.確定兩個點,找第三個點,看看他們是否共線,如果共線,當前標記陣列加一。

2.兩個確定點要取到所有不重複情況。

3.兩個點,那麼一定共線,所以我們只需要找有多少其餘的點在那條線上。然後再加上2就是所有在這條線上的點。

**

#include

#include

using namespace std;

struct star

;int

main()

int m=0;

int b[

100860];

for(

int i=

0;i++i)

} m++;}

}sort

(b,b+m);if

(n==

1) cout<<1;

else

if(n<=

0) cout<<0;

else cout<+2

;}

演算法提高 線段和點

演算法提高 線段和點 時間限制 1.0s 記憶體限制 256.0mb 問題描述 有n個點和m個區間,點和區間的端點全部是整數,對於點a和區間 b,c 若a b且a c,稱點a滿足區間 b,c 求最小的點的子集,使得所有區間都被滿足。輸入格式 第一行兩個整數n m 以下n行 每行乙個整數,代表點的座標...

1 C 知識點 值型別和引用型別

一.什麼是值型別?什麼引用型別?1.值型別的值是儲存在棧上的。引用型別是存在堆上的。2.值型別變數宣告之後,不管是否已經分配記憶體,編譯器在堆上為其分配記憶體。3.引用型別宣告的時候,這時候只在棧中分配一小片記憶體用於容納乙個位址,此時候並沒有為其分配堆上的記憶體位址,當new乙個例項的時候,真正建...

關於C 和 dx9的一點總結(1)

事件1 最近遇到了很怪異的情況,用vs2010寫點程式,在debug版本下除錯,竟然發現watch裡只能看到一小部分變數。思前想後不能找到原因。最後發面工程屬性裡optimization赫然勾選了o3 優化。原來選擇優化模式竟然會使得debug失效。omg。事件2 最近發現用vs編寫 不再有方便的自...