C语言编程问题 高手进!!! 问题解决追加分数!!!!

题目大致意思就是:平面内有五个点,在这一区域求一点(横纵坐标均为整数)到这几点的距离之和,并求最小值……还有就是,怎么能既输出每组的数值又选出最小值呢??只要输出最小值也... 题目大致意思就是:平面内有五个点,在这一区域求一点(横纵坐标均为整数)到这几点的距离之和,并求最小值…… 还有就是,怎么能既输出每组的数值又选出最小值呢??只要输出最小值也可以!!
高手给帮帮忙吧,真的是不会了……
求最小值好像是用那个vector和push_back吧??当然用其他的也可以,只要能出结果就行(不用我的程序,另编一个也可以,结果正确即选为最佳答案!!!)
我的程序是:
main()
{int sum=0,i,j;
int m1,m2,m3,m4,m5;
int n1,n2,n3,n4,n5;
for(i=4;i<=81;i++)
{for(j=11;j<=i;j++)
m1=pow(i-22);
n1=pow(j-38);
sum+=sqrt(m1+n1,1/2);
m2=pow(i-8);
n2=pow(j-13);
sum+=sqrt(m2+n2,1/2);
m3=pow(i-4);
n3=pow(j-81);
sum+=sqrt(m3+n3,1/2);
m4=pow(i-51);
n4=pow(j-32);
sum+=sqrt(m4+n4,1/2);
printf("h=%d,z=%d,sum=%d",i,j,sum);
printf("\n");}
}
程序中出现的数字为五个点的坐标,其中i代表所求点的横坐标,j为纵坐标。

五个点的坐标为:(22,38)(8,13)(4,81)(51,32)(38,11)
程序里少了第五个:
m5=pow(i-38);
n5=pow(j-11);
sum+=sqrt(m5+n5,1/2);

筛选最小值的程序最好能镶嵌在编好的程序里,本人是C语言小白,真不知道怎么弄……

先行谢过了!!
展开
 我来答
kutpbpb
2011-05-13 · TA获得超过528个赞
知道小有建树答主
回答量:332
采纳率:0%
帮助的人:412万
展开全部
//程序可以正确运行,希望kutpbpb的回答能对你有所帮助!
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#include<math.h>
#define RANGE 20 //产生该范围内随机数;
#define N 5
typedef struct //定义含有横纵坐标的结构体;
{
int x;
int y;
}Point;
int GetDistance(int x,int y,Point p[]) //返回距离已知点的平方和;
{
int dis=0;
for(int i=0;i<N;i++)
dis+=(x-p[i].x)*(x-p[i].x)+(y-p[i].y)*(y-p[i].y);
return dis;
}
void main()
{
srand((unsigned)time(NULL));
//初始化随机数种子;

Point p[N];//定义已知点数组;
Point MinDis,low,high;
//MinDis记录找到的最小点的坐标;low,high分别标记已知点的横,纵坐标范围

int i,j,temp;
double Distance=0;
low.x=RANGE+1;
low.y=RANGE+1;
high.x=-1;
high.y=-1;
for(i=0;i<N;i++)
{
p[i].x=rand()%RANGE; //产生已知点的随机坐标;
p[i].y=rand()%RANGE;
if(p[i].x<low.x)
low.x=p[i].x;
if(p[i].x>high.x)
high.x=p[i].x;
if(p[i].y<low.y)
low.y=p[i].y;
if(p[i].y>high.y)
high.y=p[i].y;
}
Distance=32767;
for(i=low.x;i<=high.x;i++)
for(j=low.y;j<=high.y;j++)
{
temp=GetDistance(i,j,p);
if(temp<Distance)
{
MinDis.x=i;
MinDis.y=j;
Distance=temp;
}
}
printf("\n输出平面上已知5个点:");
for(i=0;i<N;i++)
printf("\n第 %d 个点: %d %d ",i+1,p[i].x,p[i].y);
printf("\n输出结果:");
printf("\n距离最小的点为: %d %d ,且最小距离为 %lf ",MinDis.x,MinDis.y,sqrt(Distance));

}
追问
你说的我不大懂,但是感觉挺正确的,那就麻烦你把整个程序给我编出来吧(我以前学过一点C语言,现在都忘了,实在是不会呀):总共有九个点,(22,38)(8,13)(4,81)(51,32)(38,11)(17,12)(81,63)(19,45)(62,12),关键是最小值和取得最小值时的坐标,只要能得到这个结果就可以了!!
结果就别发我邮箱吧:704727849@qq.com
万分感激!!!
问题解决后追加10个财富值!!!
再次感谢!!!

麻烦发我邮箱……
追答
//结果就别发我邮箱吧:704727849@qq.com???,是不要发邮箱嘛,那就发这里了!
//程序已经修改,满足要求,可以正确运行,希望kutpbpb的回答能对你有所帮助!
#include
#include
#define N 9 //定义已知点个数
typedef struct //定义含有横纵坐标的结构体;
{
int x;
int y;
}Point;
int GetDistance(int x,int y,Point p[]) //返回距离已知点的平方和;
{
int dis=0;
for(int i=0;ihigh.x)
high.x=p[i].x;
if(p[i].yhigh.y)
high.y=p[i].y;
}
Distance=32767000;
for(i=low.x;i<=high.x;i++)
for(j=low.y;j<=high.y;j++)
{
temp=GetDistance(i,j,p);
if(temp<Distance)
{
MinDis.x=i;
MinDis.y=j;
Distance=temp;
}
}
printf("\n输出平面上已知点:");
for(i=0;i<N;i++)
printf("\n第 %d 个点: %d %d ",i+1,p[i].x,p[i].y);
printf("\n输出结果:");
printf("\n距离最小的点为: %d %d ,且最小距离为 %lf ",MinDis.x,MinDis.y,sqrt(Distance));

}
丝屡
2011-05-13 · TA获得超过180个赞
知道小有建树答主
回答量:98
采纳率:0%
帮助的人:114万
展开全部
pow和sqrt的原型分别是求乘幂和平方根的函数:
double pow( double x, double y ); double sqrt(double); 其中x需大于0
这两个函数你都用错了
另外22,38,8,13等又是什么?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式