| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 456 人关注过本帖
标题:这个问题有点麻烦
只看楼主 加入收藏
菜鸟1号
Rank: 1
等 级:新手上路
帖 子:43
专家分:0
注 册:2006-4-7
收藏
 问题点数:0 回复次数:1 
这个问题有点麻烦

题目简化后为:输入N个3维坐标...N要大于16....然后16以后的坐标同前16个坐标比较..找出与之最近的一个坐标并输出

例子:Example

Input

0 0 0
255 255 255
0 0 1
1 1 1
128 0 0
0 128 0
128 128 0
0 0 128
126 168 9
35 86 34
133 41 193
128 0 128
0 128 128
128 128 128
255 0 0
0 1 0
0 0 0
255 255 255
253 254 255
77 79 134
81 218 0
-1 -1 -1

Output

(0,0,0) maps to (0,0,0)
(255,255,255) maps to (255,255,255)
(253,254,255) maps to (255,255,255)
(77,79,134) maps to (128,128,128)
(81,218,0) maps to (126,168,9)

#include<iostream.h>
#include<math.h>
struct colour
{int x;
int y;
int z;
}color[30];

void compare(int num)
{double d;
double min;
int temp=1;
int i,j;
for(i=17;i<=num;i++)
{min=sqrt(pow(color[i].x-color[1].x,2)+pow(color[i].y-color[1].y,2)+pow(color[i].z-color[1].z,2));

for(j=1;j<=16;j++)
{d=sqrt(pow(color[i].x-color[j].x,2)+pow(color[i].y-color[j].y,2)+pow(color[i].z-color[j].z,2));
if(d<min)
{min=d;
temp=j;
}
}
cout<<"("<<color[i].x<<","<<color[i].y<<","<<color[i].z<<")"
<<" maps to "<<"("<<color[temp].x<<","<<color[temp].y<<","<<color[temp].z<<")"<<endl;
}

}
int main()
{
int m,n,l;
int i;
int counter=0;

for(i=1;i<30;i++)
{cin>>m>>n>>l;
if(m!=-1&&n!=-1&&l!=-1)
{
counter++;
color[i].x=m;
color[i].y=n;
color[i].z=l;
}
else
break;
}
compare(counter);
return 0;
}


把例子中的输入进去答案是正确的..但是如果换个简单的
比方说前13个是1 1 1,14个 1 2 3,15个是1 0 2,16个是0 0 0,
16以后是
1 2 3
0 0 0
1 1 1
这样就不会是正确答案了!
麻烦大家帮我看看...3Q~

搜索更多相关主题的帖子: 麻烦 
2006-07-27 20:58
soft_wind
Rank: 3Rank: 3
等 级:新手上路
威 望:8
帖 子:1430
专家分:0
注 册:2006-4-5
收藏
得分:0 

#include<iostream.h>
#include<math.h>
struct colour
{int x;
int y;
int z;
}color[30];

void compare(int num)
{double d;
double min;
int temp=1;
int i,j;
for(i=16;i<=num;i++)
{min=sqrt(pow(color[i].x-color[1].x,2)+pow(color[i].y-color[1].y,2)+pow(color[i].z-color[1].z,2));

for(j=0;j<16;j++)
{d=sqrt(pow(color[i].x-color[j].x,2)+pow(color[i].y-color[j].y,2)+pow(color[i].z-color[j].z,2));
if(d<min)
{min=d;
temp=j;
}
}
cout<<"("<<color[i].x<<","<<color[i].y<<","<<color[i].z<<")"
<<" maps to "<<"("<<color[temp].x<<","<<color[temp].y<<","<<color[temp].z<<")"<<endl;
}

}
int main()
{
int m,n,l;
int i;
int counter=0;

for(i=0;i<30;i++)
{cin>>m>>n>>l;
if(m!=-1&&n!=-1&&l!=-1)
{
counter++;
color[i].x=m;
color[i].y=n;
color[i].z=l;
}
else
break;
}
compare(counter);
return 0;
}

楼主您把界限弄错了。
数组从0开始,并不是从1开始!


对不礼貌的女生收钱......
2006-07-27 21:12
快速回复:这个问题有点麻烦
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.017588 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved