【POJ】:POJ2606,poj1118,poj2780合集

题意

这三道题都是问了一个知识,就是给出很多点,然后问的是最多有多少个点在一条线上,差不多代码都能用

解法

遍历遍历遍历!!!!!!!!!
遍历遍历遍历!!!!!!!!!
遍历遍历遍历!!!!!!!!!

思路就是遍历,以两个点为初始点,然后判断其他点是否在这条线上,如果在这条线上,就对统计值进行增添运算。这就是计算的结果
详见代码

代码

#include <iostream>
using namespace std;
const int maxn=1000;
struct point{
    int x;
    int y;
}P[maxn];
int main(){
    int n,i;
    while(cin>>n){
        for(i=0;i<n;i++){
            cin>>P[i].x>>P[i].y;
        }
        int max = 0;
        for(i=0;i<n;i++){
            for(int j=i+1;j<n;j++){
                int cnt = 2;
                for(int k=j+1;k<n;k++){
                    int m = (P[k].y-P[j].y)*(P[j].x-P[i].x);
                    int n = (P[j].y-P[i].y)*(P[k].x-P[j].x);
                    if(m==n){
                        cnt++;
                    }
                }
                if(cnt>max)  max = cnt;
            }
        }
        cout<<max<<endl;
    }
    return 0;
}

你可能感兴趣的:(遍历,poj)