网页资讯视频图片知道文库贴吧地图采购
进入贴吧全吧搜索

 
 
 
日一二三四五六
       
       
       
       
       
       

签到排名:今日本吧第个签到,

本吧因你更精彩,明天继续来努力!

本吧签到人数:0

一键签到
成为超级会员,使用一键签到
一键签到
本月漏签0次!
0
成为超级会员,赠送8张补签卡
如何使用?
点击日历上漏签日期,即可进行补签。
连续签到:天  累计签到:天
0
超级会员单次开通12个月以上,赠送连续签到卡3张
使用连续签到卡
12月27日漏签0天
c#吧 关注:188,705贴子:824,141
  • 看贴

  • 图片

  • 吧主推荐

  • 视频

  • 游戏

  • 8回复贴,共1页
<<返回c#吧
>0< 加载中...

求大神赐教~~~~~~~~~~~~~~~~~~~蚂蚁上杆问题用编程的思想写出来

  • 只看楼主
  • 收藏

  • 回复
  • 溺于世光的少年
  • c#码农
    7
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
有一根27厘米长的细木杆,在第3厘米,7厘米,11厘米,17厘米,23厘米这五个位置上各有一只蚂蚁,木杆很细,不能同时通过两只蚂蚁,开始时,蚂蚁的头朝向左还是右是任意的,他们只会朝前走或掉头,但不会后退,当两只蚂蚁相遇后,蚂蚁会同时掉头朝反方向走,假设蚂蚁们每秒钟可以走1厘米的距离。求所有蚂蚁都离开木杆的最小时间和最大时间。用c#写.我上网搜了好久都是java的有没有C#大神,感激不尽!!!!


  • 溺于世光的少年
  • c#码农
    7
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
自己顶,顶顶又不会怀孕~~~这个问题我确实想了,也看了点java的没看懂.求大神指导啊~~~


2025-12-27 14:18:28
广告
不感兴趣
开通SVIP免广告
  • 此ID已被我抢注
  • c#诠释者
    12
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
深搜解决。。。
不用深搜,也就2**5=32种情况,计算时间就可以。
search(int n,int dir)
{
//深度够,开始搜索
search(++n,1);
search(++n,0)
}
gettime()
{
int time=0
while(还有没离开的)
time++,走一步
get min max
}


  • 百川heaven
  • c#小菜鸟
    3
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
static void Main(string[] args)
{
//最短时间
Ant[] ant = new Ant[5];
ant[0]=new Ant(3,-1);
ant[1]=new Ant(7,-1);
ant[2]=new Ant(11,-1);
ant[3]=new Ant(17,1);
ant[4]=new Ant(23,1);
while (true)
{
ant[0].walk();
ant[1].walk();
ant[2].walk();
ant[3].walk();
ant[4].walk();
bool b0 = (ant[0].position == 0) || (ant[0].position == 27);
bool b1 = (ant[1].position == 0) || (ant[1].position == 27);
bool b2 = (ant[2].position == 0) || (ant[2].position == 27);
bool b3 = (ant[3].position == 0) || (ant[3].position == 27);
bool b4 = (ant[4].position == 0) || (ant[4].position == 27);
if (b0 && b1 && b2 && b3 && b4)
{
break;
}
for (int i = 0; i < ant.Length - 1; i++)
{
if (ant[i].position > ant[i + 1].position)
{
ant[i].back();
ant[i + 1].back();
}
}
}
Console.WriteLine("蚂蚁总共走过了{0}", ant[0].time);
Console.ReadKey();
}
class Ant
{
public double position;
public double direction;
public double time;
public Ant(double pos, double dir)
{
position = pos;
direction = dir;
}
public void walk()
{
if ((position > 0) && (position < 27))
{
position = position + direction;
}
time = time + 1;
}
public void back()
{
direction = 0 - direction;
}
}
//写的很拙劣,楼主凑合看吧。


  • 此ID已被我抢注
  • c#诠释者
    12
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
如图,最长24,最短11(到0或者27就算走完了)

代码



GetTime函数




  • 此ID已被我抢注
  • c#诠释者
    12
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
代码也贴到csdn了
https://code.csdn.net/snippets/231437
GetTime函数
//根据方向获取时间
public static int GetTime()
{
//保存
dir.CopyTo(originalDir,0);
//重新设置 位置
loc = new int[AntNums]{
//在第3厘米,7厘米,11厘米,17厘米,23厘米
3,7,11,17,23
};//位置
int time = 0;
while(AnyAntInLine())
{
time++;//时间自增
//标记为本次还未行走
for(int i = 0;i < loc.Length;i++)
walked[i] = false;
for(int i = 0;i < loc.Length;i++)
{
//如果有两只方向相反,距离为1,则本次移动只需调整方向即可
for(int j = i + 1;j < loc.Length;j++)
{
if(Math.Abs(loc[i] - loc[j]) == 1 && //距离为1
dir[i] + dir[j] == 0 &&//方向相反
walked[i] == false && walked[j] == false
)
{
walked[i] = true;
walked[j] = true;
dir[i] *= -1;
dir[j] *= -1;
}
}
}
//move
for(int i = 0;i < loc.Length;i++)
{
if(walked[i] == false)
{
loc[i] += dir[i];
}
}
//检测重合
for(int i = 0;i < loc.Length;i++)
{
for(int j = i + 1;j < loc.Length;j++)
{
if(loc[i] == loc[j])
{
//重合 转向
dir[i] *= -1;
dir[j] *= -1;
}
}
}
}
Console.Write("Time={0},Dir:",time);
originalDir.ToList().ForEach(i => Console.Write(i + "\t"));
Console.WriteLine("\n");
//处理时间
return time;
}


  • 此ID已被我抢注
  • c#诠释者
    12
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
搜了下,这题是<<编程之美>>上的...可以翻翻


登录百度账号

扫二维码下载贴吧客户端

下载贴吧APP
看高清直播、视频!
  • 贴吧页面意见反馈
  • 违规贴吧举报反馈通道
  • 贴吧违规信息处理公示
  • 8回复贴,共1页
<<返回c#吧
分享到:
©2025 Baidu贴吧协议|隐私政策|吧主制度|意见反馈|网络谣言警示