|
发表于 2022-7-26 00:52:30
|
显示全部楼层
你好,我是学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;
- }
复制代码
(可能有错,大佬勿喷) |
|