暴力枚举解两条斜线问题

平面上有n个点,现在你需要建造两条路,一条是斜率为1,
另一条斜率为-1
你的任务是让这两条路经过尽可能多的点
求最多经过几个点

题目:斜率为±1的两条直线最多经过几个点,并输出。
解题思路

  • 那么我们可以有方程斜率为1的直线为y=x+b1
  • 斜率为-1的直线为y=-x+b2
  • 可以得出b1=y-x,b2=y+x
  • 如果b1或b2相同,则点在这两条直线上
  • 因此问题变成了最多有几个点的b1或b2相同
  • 那么枚举b1b2即可
#include <stdio.h>
#include <stdlib.h>
int main() {
    
    
	int N=0;
	int x[1000]={
    
    0};
	int y[1000]={
    
    0};
	int i,j,k,max=0; 
	scanf("%d",&N);
	for(i=0;i<N;i++){
    
    
		scanf("%d",&x[i]);
	}
	for(j=0;j<N;j++){
    
    
		scanf("%d",&y[j]);
	}
	for(i=0;i<N;i++){
    
    
		int b1 = y[i]-x[i];
		for(j=0;j<N;j++){
    
    
			int b2 = y[j]+x[j];
			int count=0;
			for(k=0;k<N;k++){
    
    
				if(b1 == y[k]-x[k] || b2 == y[k]+x[k]){
    
    
					count++;
				}			
			}
			if(max<count){
    
    
				max = count;
			} 
		}
	}
	printf("%d",max);
	return 0;
}

猜你喜欢

转载自blog.csdn.net/m0_46672781/article/details/119381848
今日推荐