【算法问题】关于找零钱的算法!

peng2739956 2011-12-01 10:34:55
将一张一百元的钞票换成一元、二元、五元的零钱(要求一元、二元、五元零钱同时要有),要正好换50张。编程计算总共有几种换法。要求输出每一种换法的详情及换法总数。 用应用台或者窗体程序都可以。


各位大神 给出你们的答案
...全文
521 23 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
23 条回复
切换为时间正序
请发表友善的回复…
发表回复
jshi123 2011-12-07
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 pushlau 的回复:]

老大,你的思路是?
我怎么觉得你是看上面的打印结果直接输出的结果?

[/Quote]
我也不知道是什么思路,算赖皮好了。最近水区灌水有点多。。
jshi123 2011-12-07
  • 打赏
  • 举报
回复

for (int i = 1; i <= 12; i++)
{
Console.WriteLine("Result {0} : {1} one yuan, {2} two yuan, and {3} five yuan.", i, i * 3, 50 - i * 4, i);
}
pushlau 2011-12-07
  • 打赏
  • 举报
回复
老大,你的思路是?
我怎么觉得你是看上面的打印结果直接输出的结果?

[Quote=引用 15 楼 jshi123 的回复:]

C# code

for (int i = 1; i <= 12; i++)
{
Console.WriteLine("Result {0} : {1} one yuan, {2} two yuan, and {3} five yuan.", i, i * 3, 50 - i * 4, i);
}
[/Quote]
烟波钓 2011-12-07
  • 打赏
  • 举报
回复
[Quote=引用 19 楼 yanbuodiao 的回复:]
引用 16 楼 pushlau 的回复:
老大,你的思路是?
我怎么觉得你是看上面的打印结果直接输出的结果?


引用 15 楼 jshi123 的回复:

C# code

for (int i = 1; i <= 12; i++)
{
Console.WriteLine("Result {0} : {1} one yuan, {2} two yuan, and {3} f……
[/Quote]完后使用15楼的算法 这个是人脑+程序
1800包吃包住 2011-12-07
  • 打赏
  • 举报
回复
for (int a = 1; a <= 19;a++ )
{
for (int b = 1; b < 50 - a; b++)
{
int A1 = b;
int A2 = (100 - A1-a*5) / 2;
int A5 = a;
if (A1 + A2 + A5 == 50&&A1+2*A2+A5*5==100)
{
Console.WriteLine("{0} 张一元, {1} 张一元, {2} 张一元", A1, A2, A5);
}
}
}

这样比上面好点!
1800包吃包住 2011-12-07
  • 打赏
  • 举报
回复
public static void GetA4() 
{
for (int a = 1; a < 20; a++)
{
int x = 5 * a;
int xyz = 100 - x;
if (xyz > 0)
{
for (int b = 1; b <= xyz - 2; b++)
{
int A1 = b;
int A2 = (xyz - A1) / 2;
if (A1 + A2 + a == 50)
{
if (A1 + A2 * 2 + a * 5 == 100)
{
Console.WriteLine("{0} 张一元, {1} 张一元, {2} 张一元", A1, A2, a);
}
}
}
}
}
}

比15楼差远了 !!!!!
烟波钓 2011-12-07
  • 打赏
  • 举报
回复
c:5元的个数……
烟波钓 2011-12-07
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 pushlau 的回复:]
老大,你的思路是?
我怎么觉得你是看上面的打印结果直接输出的结果?


引用 15 楼 jshi123 的回复:

C# code

for (int i = 1; i <= 12; i++)
{
Console.WriteLine("Result {0} : {1} one yuan, {2} two yuan, and {3} five yuan.", i, i * 3, ……
[/Quote]这个是方程解出来的…… 数学了 不带这样的
a+b+c=50
a+2b+5c=100
得出a=3c;b=50-4c a:一元的个数 b:二元的个数 c:6元的个数
完后在a>1;
b>1;
c>1:
得出 1<c<49/4
嘿嘿
evaELLIS 2011-12-07
  • 打赏
  • 举报
回复
脑子都挺好使啊
pushlau 2011-12-06
  • 打赏
  • 举报
回复
好吧,把分给我,OK?

[Quote=引用 13 楼 peng2739956 的回复:]

NO NO NO 题目要求 2元 1元 和 5元 必须同时存在 ,另外这个并不是背包问题。 别想那么复杂
[/Quote]
peng2739956 2011-12-06
  • 打赏
  • 举报
回复
NO NO NO 题目要求 2元 1元 和 5元 必须同时存在 ,另外这个并不是背包问题。 别想那么复杂
绿领巾童鞋 2011-12-03
  • 打赏
  • 举报
回复
背包算法
尛崽 2011-12-03
  • 打赏
  • 举报
回复
还不是很好,时间复杂度有点高,还有就是一元的for语句还有考虑的空间。
尛崽 2011-12-03
  • 打赏
  • 举报
回复
public class Demo {

/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
int a ,b,c;
for(b=0;b<=50;b++){
for(c=0;c<=5;c++){
for(a=0;a<=50;a++){
if(a*1+b*2+c*5==100){
if(a+b+c==50){
System.out.print(a+"张一元 ");
System.out.print(b+"张两元 ");
System.out.println(c+"张五元");
}
}
}
}
}
}
}
运行后的结果:
15张一元 30张两元 5张五元
12张一元 34张两元 4张五元
9张一元 38张两元 3张五元
6张一元 42张两元 2张五元
3张一元 46张两元 1张五元
0张一元 50张两元 0张五元
绿领巾童鞋 2011-12-02
  • 打赏
  • 举报
回复
百度谷歌
尛崽 2011-12-02
  • 打赏
  • 举报
回复
这个是错误的!!
首先如果都是两元的。就是正好五十张,所以何来至少每种至少一张的呢?
[Quote=引用 3 楼 pushlau 的回复:]
菜鸟帮顶。我这个不知是不是算法...
要三种零钞至少都有一张,我就先分别抽出一张。
结果:
Result 1 : 3 one yuan, 46 two yuan, and 1 five yuan.
Result 2 : 6 one yuan, 42 two yuan, and 2 five yuan.
Result 3 : 9 one yuan, 38 two yuan, and 3 f……
[/Quote]
peng2739956 2011-12-02
  • 打赏
  • 举报
回复
3楼的写法跟我的一样 是穷举 ,有没有其他的。
pushlau 2011-12-01
  • 打赏
  • 举报
回复
菜鸟帮顶。我这个不知是不是算法...
要三种零钞至少都有一张,我就先分别抽出一张。
结果:
Result 1 : 3 one yuan, 46 two yuan, and 1 five yuan.
Result 2 : 6 one yuan, 42 two yuan, and 2 five yuan.
Result 3 : 9 one yuan, 38 two yuan, and 3 five yuan.
Result 4 : 12 one yuan, 34 two yuan, and 4 five yuan.
Result 5 : 15 one yuan, 30 two yuan, and 5 five yuan.
Result 6 : 18 one yuan, 26 two yuan, and 6 five yuan.
Result 7 : 21 one yuan, 22 two yuan, and 7 five yuan.
Result 8 : 24 one yuan, 18 two yuan, and 8 five yuan.
Result 9 : 27 one yuan, 14 two yuan, and 9 five yuan.
Result 10 : 30 one yuan, 10 two yuan, and 10 five yuan.
Result 11 : 33 one yuan, 6 two yuan, and 11 five yuan.
Result 12 : 36 one yuan, 2 two yuan, and 12 five yuan.

代码:

class Program
{
static void Main(string[] args)
{
int resultNumber=1;
for (int one = 0; one <= 92; one++)
{
for (int two = 0; two <= 46; two++)
{
for (int five = 0; five <= 19; five++)
{
if (one + 2 * two + five * 5 == 92 && one + two + five == 47)
{
Console.WriteLine("Result " + resultNumber++ + " : " + (one + 1) + " one yuan, " + (two + 1) + " two yuan, and " + (five + 1) + " five yuan.");
}
}
}
}
Console.ReadKey();
}
}
peng2739956 2011-12-01
  • 打赏
  • 举报
回复
这个问题 我不需要1表算法 我要多种的 我自己有个算法 :100块钱可以换100张1块的,50张2块的,20张5块的 然后把他们分割 乘以各自的数等于100 数量加起来等于50. 这只是一种 我看有没有其他的算法。
加载更多回复(1)

111,094

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

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