数模论坛

 找回密码
 注-册-帐-号
搜索
热搜: 活动 交友 discuz
查看: 4207|回复: 7

急需钻井问题的解法!!

[复制链接]
发表于 2005-7-26 04:47:35 | 显示全部楼层 |阅读模式
<>各位高手好啊!</P>
<>最近在做99年的《钻井问题》的题目。</P>
<>我感觉是用0,1分布来做,可是求解好象很麻烦哦!有那位能帮助一下啊。</P>
发表于 2005-7-31 05:32:30 | 显示全部楼层
我前两天也刚做了这个题目,编程很好实现,做几个循环就行了
发表于 2005-8-26 05:26:06 | 显示全部楼层
是的,你可以用全局搜索或局部搜索
发表于 2005-8-26 05:27:13 | 显示全部楼层

不要灰心

你可以用全局搜索或局部搜索
发表于 2005-8-27 23:49:16 | 显示全部楼层
<><STRONG><FONT face=Verdana color=#61b713>wlsui_wls</FONT></STRONG></P>
<><STRONG><FONT face=Verdana color=#61b713>能否把你编的程序贴出来给我看看</FONT></STRONG></P>
<><STRONG><FONT face=Verdana color=#61b713>或者发到我的信箱<a href="mailtdasheng0077@163.com" target="_blank" >dasheng0077@163.com</A></FONT></STRONG></P>
<P><STRONG><FONT face=Verdana color=#61b713>谢谢</FONT></STRONG></P>
发表于 2005-8-29 18:36:54 | 显示全部楼层
<>问题一的程序:</P>
<>#include &lt;iostream.h&gt;<BR>#include &lt;math.h&gt;<BR>const float demand=0.05;<BR>int num,well[12],w[12];//num表示计数点,well[]表示有几口井可用,w[]表示标志哪口井可用<BR>float x[12]={0.50,1.41,3.00,3.37,3.40,4.72,4.72,5.43,7.57,8.38,8.98,9.50},<BR>y[12]={2.00,3.50,1.50,3.51,5.50,2.00,6.24,4.10,2.01,4.50,3.41,0.80};<BR>void main()  //<BR>{<BR>int i,n,a[12],b[12],sum;//sum表示计数的总数<BR>float dex,dey,ax[12],by[12];//dex,dey表示小正方形的中心坐标<BR>sum=0;<BR>cout&lt;&lt;"请输入总的井数:";<BR>cin&gt;&gt;n;</P>
<>for(dex=0;dex&lt;=1.0;dex+=0.01)<BR> for(dey=0;dey&lt;=1.0;dey+=0.01)<BR> {<BR>  num=0;<BR>  for(i=0;i&lt;n;i++)<BR>  {<BR>   a=int(x);//提取出x[],y[]的整数部分<BR>   b=int(y);<BR>   ax=x-a;<BR>   by=y-b;//提取小数部分<BR>  }<BR>  for(i=0;i&lt;n;i++)  w=0;//给w[]赋初值</P>
<P>  for(i=0;i&lt;n;i++)<BR>  {<BR>   if(ax-dex&lt;=demand &amp;&amp; by-dey&lt;=demand&amp;&amp; dex-ax&lt;=demand &amp;&amp; dey-by&lt;=demand)<BR>   {<BR>     num++;<BR>     w=1;<BR>   }<BR>  }<BR>  if(num&gt;sum)//num对应是w[],sum对应的是well[]<BR>  {<BR>   sum=num;<BR>   for(i=0;i&lt;n;i++)<BR>    well=w;<BR>  }<BR> }<BR>cout&lt;&lt;"可用的旧井是:";<BR>for(i=0;i&lt;n;i++)<BR>  if(well) cout&lt;&lt;i+1&lt;&lt;" , ";<BR>cout&lt;&lt;endl;<BR>cout&lt;&lt;"可用的旧井的总数是:"&lt;&lt;sum&lt;&lt;endl;<BR>}<BR></P>
发表于 2005-8-29 18:37:40 | 显示全部楼层
<>问题二的程序:</P>
<>#include&lt;math.h&gt;<BR>#include&lt;iostream.h&gt;<BR> const double demand=0.05,pi=3.1415926;<BR> float px[12],py[12],ax[12],by[12],<BR>       x[]={0.50,1.41,3.00,3.37,3.40,4.72,4.72,5.43,7.57,8.38,8.98,9.50},<BR>       y[]={2.00,3.50,1.50,3.51,5.50,2.00,6.24,4.10,2.01,4.50,3.41,0.80};<BR> int n,s,num,nearx[12],neary[12],w[12],well[12];<BR> void ChangeXY(int i,double a,double x1,double y1)<BR> {<BR> px=x1*cos(a*pi/180)-y1*sin(a*pi/180);<BR> py=x1*sin(a*pi/180)+y1*cos(a*pi/180);<BR> }<BR> float sqr(double p)<BR> {<BR> return p*p;<BR> }<BR> void main()<BR> {<BR> double dex,dey,a,a1,dex1,dey1;<BR> int i;<BR> cout&lt;&lt;"旧井的总数是:";<BR> cin&gt;&gt;n;<BR> s=0;<BR> for(a=0;a&lt;=90;a+=0.01)//<BR> {<BR>  for(i=0;i&lt;12;i++)<BR>  {<BR>   ChangeXY(i,a,x,y);</P>
<>   nearx=int(px);<BR>   neary=int(py);<BR>   if(px&lt;0)<BR>   {<BR>    ax=abs(nearx)+px+1;<BR>   }<BR>   else ax=px-nearx;<BR>   if(py&lt;0)<BR>   {<BR>    by=abs(neary)+py+1;<BR>   }<BR>   else by=py-neary;<BR>  }<BR>  for(dex=0;dex&lt;=1.0;dex+=0.01)//<BR>   for(dey=0;dey&lt;=1;dey+=0.01)//<BR>   {<BR>    for(i=0;i&lt;n;i++)   w=0;<BR>    num=0;<BR>    for(i=0;i&lt;n;i++)<BR>    {<BR>     if(sqrt(sqr(ax-dex)+sqr(by-dey))&lt;=demand)<BR>     {<BR>      num++;   w=1;<BR>     }<BR>    }<BR>    if(num&gt;=s)<BR>    { <BR>     s=num; <BR>     for(i=0;i&lt;n;i++)   well=w;<BR>     a1=a;<BR>     dex1=dex;<BR>     dey1=dey;<BR>    }<BR>   }<BR>  }//for(a=...)<BR> cout&lt;&lt;"可以利用的旧井序列号为:";<BR> for(i=0;i&lt;n;i++) if(well)  cout&lt;&lt;i+1&lt;&lt;" ";<BR> cout&lt;&lt;endl;<BR> cout&lt;&lt;"可以利用的旧井的总数为:"&lt;&lt;s&lt;&lt;endl; <BR> cout&lt;&lt;"原点是:("&lt;&lt;dex1&lt;&lt;","&lt;&lt;dey1&lt;&lt;")";<BR>}</P>
发表于 2005-8-31 05:27:32 | 显示全部楼层
感谢
您需要登录后才可以回帖 登录 | 注-册-帐-号

本版积分规则

小黑屋|手机版|Archiver|数学建模网 ( 湘ICP备11011602号 )

GMT+8, 2024-11-27 09:43 , Processed in 0.059173 second(s), 19 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表