两条直线的斜率k已经确定,根据y=kx+b现在最重要的事情是找出这两条直线的b
而斜率为1的直线,b就等于y轴坐标减去z轴坐标,设为k1
斜率为-1的直线,b就等于x轴坐标加上y轴坐标,设为k2
每次确定k1和k2的值,用两个for循环,因为k1和k2的排列组合有n*n种,每次得到一种新的就遍历以前的点有多少个会分布在这上面,寻找最大的那个数即可。
#include<bits/stdc++.h> using namespace std; int main() { int n,x[10010],y[10010],i,j,ma=-1,su=0,k1,k2,k; cin>>n;//两条直线的斜率已经确定,根据y=kx+b现在最重要的事情是找出这两条直线的b for(i=0;i<n;i++)cin>>x[i]; for(i=0;i<n;i++)cin>>y[i]; for(i=0;i<n;i++) { k1=x[i]+y[i]; for(j=0;j<n;j++) { k2=y[j]-x[j]; su=0; for(k=0;k<n;k++) { if(x[k]+y[k]==k1||y[k]-x[k]==k2)su++; } if(su>ma)ma=su; } } cout<<ma; }