1.两份代码
#include<stdio.h> int a[200]; int b[200]; int judge(int x,int y,int c) { int count1=0,count2=0; for(int i=0;i<2*c;i++) if(x*a[i]+y*b[i]==0) return 0; else if(x*a[i]+y*b[i]>0) count1++; else if(x*a[i]+y*b[i]<0) count2++; if(count1==count2) return 1; else return 0; } int main() { int n; while(scanf("%d",&n)!=EOF) { if(!n) break; int ok=1; for(int i=0;i<2*n;i++) scanf("%d%d",&a[i],&b[i]); int A,B; for(A=-500;A<=500&&ok==1;A++) for(B=-500;B<=500;B++) { if(judge(A,B,n)==1) {ok=0;break;} } printf("%d %d\n",A,B); } return 0; }
这份代码错在上面那两个for循环那,Body执行完了之后,A++还会执行的。
2.
正确代码,利用了goto语句呃....
#include<stdio.h> int a[200]; int b[200]; int judge(int x,int y,int c) { int count1=0,count2=0; for(int i=0;i<2*c;i++) if(x*a[i]+y*b[i]==0) return 0; else if(x*a[i]+y*b[i]>0) count1++; else if(x*a[i]+y*b[i]<0) count2++; if(count1==count2) return 1; else return 0; } int main() { int n; begin: while(scanf("%d",&n)!=EOF) { if(!n) break; int ok=1; for(int i=0;i<2*n;i++) scanf("%d%d",&a[i],&b[i]); int A,B; for(A=-500;A<=500;A++) for(B=-500;B<=500;B++) { if(judge(A,B,n)==1) { printf("%d %d\n",A,B);goto begin;} } printf("%d %d\n",A,B); } return 0; }