#include
#define maxsize 20
int main()
{
int i,j,n,x1,y1,x[maxsize],y[maxsize],length,temp;
int x0[maxsize][maxsize];
for(i=0;i {
for(j=0;j {
x0[i][j]=0;
}
}
scanf("%d",&n);
for(i=0;i {
scanf("%d %d",&x[i],&y[i]);
x0[x[i]][y[i]]=1; //在坐标上显示
}
for(j=0;j {
for(i=0;i {
if(x[i]>x[i+1]) //前比后大交换
{
temp=x[i];
x[i]=x[i+1];
x[i+1]=temp;
}
else
continue;
}
}
for(j=0;j {
for(i=0;i {
if(y[i]>y[i+1]) //前比后大交换
{
temp=y[i];
y[i]=y[i+1];
y[i+1]=temp;
}
else
continue;
}
}
i=n/2;
x1=x[i]; //x1,y1是x[],y[]的中位数
y1=y[i];
x0[x1][y1]=2;
int s,t;
for(i=0;i<n;i++) //距离
{
s=x[i]-x1;
t=y[i]-y1;
if(s<0)
s=-s;
if(t<0)
t=-t;
length=length+s+t;
}
for(i=0;i<maxsize;i++)
{
for(j=0;j<maxsize;j++)
{
printf("%d ",x0[i][j]);
}
printf("\n");
}
return 0;
}
一、源代码如果直接复制肯定是通不过编译的,明显错误如第1、8、13、17、18这些行;
二、用二维数组保存坐标,并且把下标当坐标,但是从测试数据来看,坐标有可能是负数,这个能行吗?
三、排序那里因为看不到i、j终值,就不好判断对错了,但是几乎可以肯定else continue明显多余,还有也没有必要循环两遍,一遍即可以比较横坐标,又可以比较纵坐标的,完全用不着这样。
不按方法,不要什么图示,只要答案的话,代码修改如下:
#include
#define maxsize 20
void main() {
int i, j, n, x1, y1, x[maxsize], y[maxsize], length=0, temp;
int x0[maxsize][maxsize];
for (i = 0; i < maxsize; i++)
for (j = 0; j < maxsize; j++)
{
x0[i][j] = 0;
}
scanf("%d\n", &n);
for (i = 0; i < n; i++)
{
scanf("%d %d", &x[i], &y[i]);
//x0[x[i]][y[i]] = 1; //在坐标上显示
}
for (i = 0; i < n; i++)
for (j = i; j {
if (x[i] > x[j])
{
temp = x[i];
x[i] = x[j];
x[j] = temp;
}
if (y[i] > y[j])
{
temp = y[i];
y[i] = y[j];
y[j] = temp;
}
}
i = n / 2;
x1 = x[i]; //x1,y1是x[],y[]的中位数
y1 = y[i];
x0[x1][y1] = 2;
int s, t;
for (i = 0; i < n; i++) //距离
{
s = x[i] - x1;
t = y[i] - y1;
if (s < 0)
s = -s;
if (t < 0)
t = -t;
length = length + s + t;
}
printf("居民点到超市最小距离和%d\n", length);
/*
for (i = 0; i < n; i++)
{
for (j = 0; j < n; j++)
{
printf("%d ", x0[i][j]);
}
printf("\n");
}
*/
}