C语言编程:WOJ第1087题“数星星”,明明答案准确却不能AC
C语言编程:WOJ第1087题“数星星”,明明答案正确却不能AC
题目连接:http://acm.whu.edu.cn/learn/problem/detail?problem_id=1087,就是找最多的共线点数目
以下是我的代码,用的是暴力枚举,但是提交一直显示WRONG ANSWER。。。时间、内存都符合要求,我查不出来错误。。。求大神指教!
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
int main(){
float star[300][2]; // 星星坐标
int n;
int i = 0;
scanf("%d",&n);
while(i<n){
scanf("%f",&star[i][0]);
scanf("%f",&star[i][1]);
i++;
}
int max = 0;
int tmp;
for(i=0; i<n; i++){
for(int j=i; j<n; j++){ // 无需从 j=i+1 开始,因为端点也计入直线上
tmp = 0;
for(int k=0; k<n; k++){
//if(k!=i && k!=j){ // 无需排除直线两个端点,因为端点也计入直线上
if((star[i][0]==star[j][0] && star[j][0]==star[k][0])||(star[i][1]==star[j][1] && star[j][1]==star[k][1])) // 坐标中出现斜率为0或者无限大情况
tmp++;
else if(atan2(star[k][0]-star[j][0],star[k][1]-star[j][1]) == atan2(star[k][0]-star[i][0],star[k][1]-star[i][1]))
tmp++;
}
//}
if(max<tmp) max=tmp;
}
}
printf("%d\n",max);
return 0;
}
------解决方案--------------------
输入包含多组数据
------解决方案--------------------
不符合第二条InPut的要求。
题目连接:http://acm.whu.edu.cn/learn/problem/detail?problem_id=1087,就是找最多的共线点数目
以下是我的代码,用的是暴力枚举,但是提交一直显示WRONG ANSWER。。。时间、内存都符合要求,我查不出来错误。。。求大神指教!
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
int main(){
float star[300][2]; // 星星坐标
int n;
int i = 0;
scanf("%d",&n);
while(i<n){
scanf("%f",&star[i][0]);
scanf("%f",&star[i][1]);
i++;
}
int max = 0;
int tmp;
for(i=0; i<n; i++){
for(int j=i; j<n; j++){ // 无需从 j=i+1 开始,因为端点也计入直线上
tmp = 0;
for(int k=0; k<n; k++){
//if(k!=i && k!=j){ // 无需排除直线两个端点,因为端点也计入直线上
if((star[i][0]==star[j][0] && star[j][0]==star[k][0])||(star[i][1]==star[j][1] && star[j][1]==star[k][1])) // 坐标中出现斜率为0或者无限大情况
tmp++;
else if(atan2(star[k][0]-star[j][0],star[k][1]-star[j][1]) == atan2(star[k][0]-star[i][0],star[k][1]-star[i][1]))
tmp++;
}
//}
if(max<tmp) max=tmp;
}
}
printf("%d\n",max);
return 0;
}
------解决方案--------------------
输入包含多组数据
------解决方案--------------------
不符合第二条InPut的要求。