日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

(斜率,点和线段)zzuli1196数星星(二)

發布時間:2025/3/12 编程问答 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 (斜率,点和线段)zzuli1196数星星(二) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

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

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

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

樣例輸入
5
0 0
1 0
1 1
0 1
0.5 0.5
樣例輸出
3

分析與解

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

對于斜率,點,以及線段來說:
1.兩點確定一條直線,直線具有斜率
2.斜率可以取0到無窮
3.斜率為無窮時說明直線與y軸平行或重合
4.斜率為無窮時說明斜率公式中分母為零
5.斜率為無窮時,其值具有相對性:2?00?0和?1?00?0\frac{2-0}{0-0}和\frac{-1-0}{0-0}0?02?0?0?0?1?0?
一個是正無窮,一個是負無窮,但是其都是在一條直線上的(y軸)。
6.共線問題建立在三個點的基礎之上
7.我們不能通過一般的斜率公式是否相等來斷定三個點是否共線
8.可以通過乘式判斷3點共線
(y3?y1)(x2?x1)?(y2?y1)(x3?x1)=0(y3?y1)(x2?x1)?(y2?y1)(x3?x1)=0(y3?y1)(x2?x1)?(y2?y1)(x3?x1)=0
9.n個點,每一個點都能和剩下n-1個點組成線段
10.當每個點都不共線時,n個點組成的不同直線的個數最多
11.A點和B點組成線段也意味著B點和A點組成線段
12.n個點組成最多不同直線個數為n?(n?1)2\frac {n*(n-1)}{2}2n?(n?1)?

解題思路:
1.確定兩個點,找第三個點,看看他們是否共線,如果共線,當前標記數組加一。
2.兩個確定點要取到所有不重復情況。
3.兩個點,那么一定共線,所以我們只需要找有多少其余的點在那條線上。然后再加上2就是所有在這條線上的點。

代碼

#include<iostream> #include<algorithm> using namespace std; struct star{double x;double y; }; int main(){int n;star s[333];cin>>n;for(int i=0;i<n;++i){cin>>s[i].x>>s[i].y;}int m=0;int b[100860];for(int i=0;i<n;++i){for(int j=i+1;j<n;++j){for(int k=j+1;k<n;++k){if((s[k].y-s[i].y)*(s[k].x-s[j].x)-(s[k].y-s[j].y)*(s[k].x-s[i].x)==0){b[m]+=1;}}m++;}}sort(b,b+m);if(n==1) cout<<1;else if(n<=0) cout<<0;else cout<<b[m-1]+2; }

總結

以上是生活随笔為你收集整理的(斜率,点和线段)zzuli1196数星星(二)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。