考CSDN最牛B的程序员!

taomaintao 2007-11-26 03:38:15
有十公斤水, 现在有三个桶 一个是十公斤的一个是七公斤 一个是三公斤的 让你把十公斤水分成 两个 每份为五公斤 怎么分?


本人已经给出了答案:
请高手帮忙写一个算法出来!
10 0 0
3 7 0
3 4 3
6 4 0
6 1 3
9 1 0
9 0 1
2 7 1
2 5 3
5 5 0
...全文
808 37 打赏 收藏 转发到动态 举报
写回复
用AI写文章
37 条回复
切换为时间正序
请发表友善的回复…
发表回复
zenglang8721 2008-03-10
  • 打赏
  • 举报
回复
强人。
red_fox71 2007-12-05
  • 打赏
  • 举报
回复
mark
huming_h 2007-11-27
  • 打赏
  • 举报
回复
顶。
nyzfl 2007-11-27
  • 打赏
  • 举报
回复
路过
harryheart 2007-11-27
  • 打赏
  • 举报
回复
菜鸟是因为不太熟悉.net类库,无聊的时候写写算法还是不错的^^
dazhuaye 2007-11-27
  • 打赏
  • 举报
回复
菜鸟都成强人拉!
harryheart 2007-11-27
  • 打赏
  • 举报
回复
汗,想把调用的部分打个颜色
结果变成了
Achieve(20, 11, 9, 10, 10);
harryheart 2007-11-27
  • 打赏
  • 举报
回复
改进了一下,之前的算法有点逻辑问题,现在的能处理绝大部分排序,然后是灵活性
只要在入口里面指定三个桶的大小,以及要分出来的水量

//Bucket类没改

using System;
using System.Collections.Generic;
using System.Text;

namespace ConsoleApplication4
{
class Program
{
static void Main(string[] args)
{
Achieve(20, 11, 9, 10, 10);
}

public static void Change(Bucket bucketOut, Bucket bucketIn)
{
if (bucketOut.Water >= (bucketIn.Capacity - bucketIn.Water))
{
bucketOut.Water = bucketOut.Water - (bucketIn.Capacity - bucketIn.Water);
bucketIn.Water = bucketIn.Capacity;
bucketIn.CheckState();
bucketOut.CheckState();
}
else
{
bucketIn.Water = bucketIn.Water + bucketOut.Water;
bucketOut.Water = 0;
bucketIn.CheckState();
bucketOut.CheckState();
}
}

public static void Achieve(int big,int middle,int small,int result1,int result2 )
{
Bucket bBig = new Bucket(big);
bBig.Water = big;
bBig.CheckState();
Bucket bMiddle = new Bucket(middle);
Bucket bSmall = new Bucket(small);
while (!((bBig.Water == result1) && (bMiddle.Water == result2)))
{
if (bSmall.State != States.Full)
{
Change(bMiddle, bSmall);
Console.Write(bBig.Water);
Console.Write(bMiddle.Water);
Console.WriteLine(bSmall.Water);
if (bMiddle.State == States.Empty)
{
Change(bBig, bMiddle);
Console.Write(bBig.Water);
Console.Write(bMiddle.Water);
Console.WriteLine(bSmall.Water);
}

}
else
if (bSmall.State == States.Full)
{
Change(bSmall, bBig);
Console.Write(bBig.Water);
Console.Write(bMiddle.Water);
Console.WriteLine(bSmall.Water);
}
if ((bMiddle.State==States.Full)&&(bSmall.State==States.Full))
{
Console.WriteLine("没有答案!");
break;
}
}
}

}
}




输出:
2000
9110
929
1820
1802
7112
749
1640
1604
5114
569
1460
1406
3116
389
1280
1208
1118
1109
10100
小D2013 2007-11-27
  • 打赏
  • 举报
回复
mark
ltengteng 2007-11-27
  • 打赏
  • 举报
回复
顶啊
地下室小红叔 2007-11-27
  • 打赏
  • 举报
回复
呵呵 看了楼上的 只是针对这一特定值的特定情况
我还没写完呢 是想写个通用的 不过要判断成立条件涉及的内容太多啦

总的思路如下:
设三个容器A,B,C的容积分别是a,b,c,要量出的容量为m
1 m不能大于a,b,c中的最大值
2 m必须不能同大于两个容器的最大容积
3 将a,b,c排序(为简便设a>b>c),以C为对象容器,取B为中转容器,A为初始容器(满),必须满足以下条件之一
(1)m是c的倍数
(2)m=c倍数与b之差
(3)m=c倍数与a之差

或许还有别的可能 把这些判断完成以后 才可以写后面的程序
lizhihui3000 2007-11-27
  • 打赏
  • 举报
回复
不顶不行啊
zero8500 2007-11-27
  • 打赏
  • 举报
回复
哇,菜鸟都这么强哦,佩服哈!
Mirror然 2007-11-27
  • 打赏
  • 举报
回复
顶10楼的 · ·····
jieqimin2008 2007-11-27
  • 打赏
  • 举报
回复
投降了,只能说楼上的很牛吧!
liuyun1987 2007-11-27
  • 打赏
  • 举报
回复
楼上的强.......
shoushii 2007-11-27
  • 打赏
  • 举报
回复
LS的强悍
harryheart 2007-11-27
  • 打赏
  • 举报
回复
我是菜鸟,但你一定要给分

using System;
using System.Collections.Generic;
using System.Text;
namespace ConsoleApplication4
{
enum States { Empty, Half, Full }
//水桶类
public class Bucket
{
private States _state;
internal States State
{
get { return _state; }
set { _state = value; }
}

private int _capacity;
public int Capacity
{
get { return _capacity; }
set { _capacity = value; }
}

private int _water;
public int Water
{
get { return _water; }
set { _water = value; }
}


public Bucket(int capacity)
{
this.Capacity = capacity;
this.State = States.Empty;
this.Water = 0;
}

public void CheckState()
{
if (this.Water == this.Capacity)
{
this.State = States.Full;
}
else
if (this.Water == 0)
{
this.State = States.Empty;
}
else
{
this.State = States.Half;
}
}
}
}

using System;
using System.Collections.Generic;
using System.Text;

namespace ConsoleApplication4
{
class Program
{
static void Main(string[] args)
{
Bucket b10 = new Bucket(10);
b10.Water = 10;
b10.CheckState();
Bucket b7 = new Bucket(7);
Bucket b3 = new Bucket(3);
while (!((b10.Water == 5) && (b7.Water == 5)))
{
if (b3.State != States.Full)
{
Change(b7, b3);
Console.Write(b10.Water);
Console.Write(b7.Water);
Console.WriteLine(b3.Water);
if (b7.State == States.Empty)
{
Change(b10, b7);
Console.Write(b10.Water);
Console.Write(b7.Water);
Console.WriteLine(b3.Water);
}
else
if (b3.State == States.Full)
{
Change(b3, b10);
Console.Write(b10.Water);
Console.Write(b7.Water);
Console.WriteLine(b3.Water);
}
}
}

}

public static void Change(Bucket bucketOut, Bucket bucketIn)
{
if (bucketOut.Water >= (bucketIn.Capacity - bucketIn.Water))
{
bucketOut.Water = bucketOut.Water - (bucketIn.Capacity - bucketIn.Water);
bucketIn.Water = bucketIn.Capacity;
bucketIn.CheckState();
bucketOut.CheckState();
}
else
{
bucketIn.Water = bucketIn.Water + bucketOut.Water;
bucketOut.Water = 0;
bucketIn.CheckState();
bucketOut.CheckState();
}
}
}
}

输出:
1000
370
343
640
613
910
901
271
253
550
yaazz 2007-11-27
  • 打赏
  • 举报
回复
7 - 3 = 4
4 - 3 = 1
4 + 1 = 5
10 - 5 = 5
taomaintao 2007-11-27
  • 打赏
  • 举报
回复
试试,楼上的双星
加载更多回复(17)
套餐中一共包含5门程序员必学的数学课程(共47讲) 课程1:《零基础入门微积分》 课程2:《数理统计与概率论》 课程3:《代码学习线性代数》 课程4:《数据处理的最优化》 课程5:《马尔可夫随机过程》 哪些人适合学习这门课程? 1)大学生,平时只学习了数学理论,并未接触如何应用数学解决编程问题; 2)对算法、数据结构掌握程度薄弱的人,数学可以让你更好的理解算法、数据结构原理及应用; 3)看不懂大牛代码设计思想的人,因为所有的程序设计底层逻辑都是数学; 4)想学习新技术,如:人工智能、机器学习、深度学习等,这门课程是你的必修课程; 5)想修炼更好的编程内功,在遇到问题时可以灵活的应用数学思维解决问题。 在这门「专为程序员设计的数学课」系列课中,我们保证你能收获到这些: ①价值300元编程课程大礼包 ②应用数学优化代码的实操方法 ③数学理论在编程实战中的应用 ④程序员必学的5大数学知识 ⑤人工智能领域必修数学课 备注:此课程只讲程序员所需要的数学,即使你数学基础薄弱,也能听懂,只需要初中的数学知识就足矣。 如何听课? 1、CSDNapp:我的-我的内容库-我的课程 2、程序员学院app:我的-学习 3、pc端CSDN官网:https://edu.csdn.net/ 我的订阅-收费课

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧