本帖最后由 前路 于 2019-2-20 00:18 编辑 #include<stdio.h>
int main(void){
int N,i,j,k,temp_x,temp_y,Slope_Result;
int Slope_Result_1 = 0;
int Slope_Result_2 = 0;
int x[100], y[100];
int result[110] = {0};
int xy[100][100] = {0};
scanf("%d", &N); //输入点的总数
/*分别输入测试点的x和y坐标*/
for(i = 0; i < N; i++){//输入x的值
scanf("%d", &x[i]);
}
for(j = 0; j < N; j++){//输入y的值
scanf("%d", &y[j]);
}
for (i = 0; i < N; i++){//将输入的点显示出来
xy[ (x[i]) ][ (y[i]) ] = 1;
}
/*计算斜率为-1时的所有直线上 存在输入点情况*/
for (i = 0; i < 100; i++){
for (temp_x = 0; temp_x < i+1; temp_x++){
temp_y = (-1) * temp_x + i;
if (xy[temp_x][temp_y]){
result[i]++;
}
}
}
/*计算出斜率为-1时直线上最多点的个数*/
for (i = 0; i < ( sizeof(result)/sizeof(int) ) ; i++){
if (result[i] > Slope_Result_1){
Slope_Result_1 = result[i];
}
result[i] = 0;
}
/*计算斜率为1时的所有直线上 存在输入点情况*/
for (i = 100, j = 0 ; i >=0; i--, j++){
for (temp_x = i, k = 0 ; k < j + 1; temp_x++, k++){
temp_y = temp_x - i;
if (xy[temp_x][temp_y]){
result[i]++;
}
}
}
/*计算斜率为1时直线上最多点的个数*/
for (i = 0; i < ( sizeof(result)/sizeof(int) ) ; i++){
if (result[i] > Slope_Result_1){
Slope_Result_2 = result[i];
}
result[i] = 0;
}
/*计算满足条件的点的总和*/
Slope_Result = Slope_Result_1 + Slope_Result_2;
printf("%d\n", Slope_Result > N ? Slope_Result-1 : Slope_Result);
return 0;
}
感谢 12#楼鱼油 提供的思路
具体回复如下 |