你好,我是学C的新人,就用C写了个关于你这题的代码,有亿点冗长,不知道对不对,求指教!#include <stdio.h>
int main()
{
printf("请输入牛的数量:");
int n,xMax,xMin,yMax,yMin,count_x=0,count_y=0,z=0,p=0,s=0,t=0,u,v;
bool flag=0;
scanf("%d",&n);
printf("请输入每头牛的坐标(每行1组,用空格隔开):\n");
int x[n],y[n],Ax[n]={0},Ay[n]={0},X[n],Y[n];
for(int count=0;count<n;count++)
{
scanf("%d %d",&x[count],&y[count]);
}
/*for(int a=0;a<n;a++)
{
printf("%d %d\n",x[a],y[a]);
}*/
xMax=x[0];
yMax=y[0];
xMin=x[0];
yMin=y[0];
for(int b=1;b<n;b++)
{
xMax=(x[b]>xMax)?x[b]:xMax;
xMin=(x[b]>xMin)?xMin:x[b];
yMax=(y[b]>yMax)?y[b]:yMax;
yMin=(y[b]>yMin)?yMin:y[b];
}
bool plane[xMax-xMin+1][yMax-yMin+1]={0};
for(int c=0;c<n;c++)
{
plane[x[c]-xMin][y[c]-yMin]=1;
}
for(int d=0;d<xMax-xMin+1;d++)//每个余子式一个循环
{
for(int e=0;e<yMax-yMin+1;e++)
{
bool plane_1[xMax-xMin+1][yMax-yMin+1];
for(int f=0;f<xMax-xMin+1;f++)
{
for(int g=0;g<yMax-yMin+1;g++)
{
plane_1[f][g]==plane[f][g];//复制平面
}
}
for(int i=0;i<yMax-yMin+1;i++)
{
plane_1[d][i]=0;
}
for(int j=0;j<xMax-xMin+1;j++)
{
plane_1[e][j]=0;//求出余子式
}
for(int k=0;k<xMax-xMin+1;k++)
{
for(int l=0;l<yMax-yMin+1;l++)
{
if(plane_1[k][l])
{
Ax[z]=k;//返回为点坐标
Ay[z]=l;
z++;
}
}
}
for(int m=0;m<z;m++)//判断剩余点是否在同一直线
{
if(Ax[m]!=Ax[m+1])
{
for(int o=0;o<z;o++)
{
if(Ay[o]!=Ay[o+1])
{
p++;
}
}
}
}
if(p==z)
{
continue;
}
else
{
flag=1;
}
}
if(flag)
{
break;
}
}
//case 3/4
for(int count_1=0;count_1<n;count_1++)
{
if(!count_1)
{
X[count_1]=x[count_1];
Y[count_1]=y[count_1];
s++;
t++;
}
else
{
for(u=0;u<s;u++)
{
if(x[count_1]==X[u])
{
break;
}
}
if(u==s)
{
s++;
}
for(v=0;v<t;v++)
{
if(y[count_1]==Y[v])
{
break;
}
}
if(v==t)
{
t++;
}
}
}
if((s<=3)||(t<=3))
{
flag=1;
}
if(flag)
printf("1\n");
else
printf("0\n");
return 0;
}
(可能有错,大佬勿喷) |