| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 9361 人关注过本帖
标题:一元纸币兑换一分、二分和五分的硬币,帮我一下,谢谢!
只看楼主 加入收藏
ansic
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:恍惚窈冥
等 级:城市猎人
帖 子:1543
专家分:5367
注 册:2011-2-15
收藏
得分:0 
以下是引用chfei在2011-4-6 12:20:55的发言:

3楼的循环次数太多了  两个循环就行了 次数第一次100第二次50最多了,

麻烦老师写一个两个循环的, 谢谢!!!

善人者,不善人之师;不善人者,善人之资。不贵其师,不爱其资,虽智大迷。
2011-04-06 22:35
没落的小驴
Rank: 1
来 自:山东
等 级:新手上路
帖 子:4
专家分:0
注 册:2011-4-5
收藏
得分:0 
我是个新手,我做的为什么答案不一样哪里错了?帮修改下谢谢1

 #include "stdio.h"
   void main ()
     { int  a=0,b,c;
     while(a<=50)
       {b=0;
           while(b<=25)
         {c=50-a-b;
          if(1*a+2*b+5*c==100)
           printf("%6d%6d%6d\n",a,b,c);
                         b++;
                         }
                          a++;
                        }
                          }

2011-04-06 23:11
pangding
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:北京
等 级:贵宾
威 望:94
帖 子:6784
专家分:16751
注 册:2008-12-20
收藏
得分:0 
上网去查查不定方程
x + 2y + 5z = 100
的正整数解的解法。

跟这道题是一个意思。
2011-04-06 23:31
pangding
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:北京
等 级:贵宾
威 望:94
帖 子:6784
专家分:16751
注 册:2008-12-20
收藏
得分:0 
哦,还要求 x + y + z = 50。

那更容易了,相当于少了一个变量。一个 for 肯定就能出来呀。
2011-04-06 23:35
pangding
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:北京
等 级:贵宾
威 望:94
帖 子:6784
专家分:16751
注 册:2008-12-20
收藏
得分:0 
我稍微点一下。

x+y+z=50  ==> x=50-y-z
代到 x+2y+5z=100 里,化成:
y+4z=50 ==> y = 50-4z
由于 y >= 0 ==> 50-4z > =0
4z <= 50, z <= 12.5
所以
z 只能取 1, 2, ... ,12

所以程序的主体应该是这样:
for (z=1; z <= 12; z++) { /* ... */ }
循环体,基本就是打印,没什么特别要算的东西了。
2011-04-06 23:50
王立帅
Rank: 3Rank: 3
来 自:山东淄博
等 级:论坛游侠
帖 子:61
专家分:160
注 册:2011-4-4
收藏
得分:0 
回复 12楼 没落的小驴
给你回复短信息了,循环判断条件写错了,注意审题

一个人走
2011-04-07 07:59
没落的小驴
Rank: 1
来 自:山东
等 级:新手上路
帖 子:4
专家分:0
注 册:2011-4-5
收藏
得分:0 
回复 16楼 王立帅
谢谢收到了
2011-04-07 17:35
voidx
Rank: 12Rank: 12Rank: 12
来 自:邯郸
等 级:火箭侠
帖 子:1250
专家分:3538
注 册:2011-4-7
收藏
得分:0 
程序代码:
for (i = 0; i <= 12; i++) {
    for (j = 0; i * 5 + j * 2 < 100; j++) {
        if (i + j + 100 - (i * 5 + j * 2) == 50) {
            printf(...);
        }
    }
} 

上面的循环就足够了。
解释:
i 表示 5 分硬币的数量,j 表示 2 分硬币的数量, 100 - (i* 5 + j * 2)就是 1 分硬币的数量。
i = 13 ,j = 0 时,硬币数量为 13 + 35 = 48 < 50,可知若 i > 12, 无法满足题目要求
因此 i <= 12;

[ 本帖最后由 voidx 于 2011-4-7 20:59 编辑 ]
2011-04-07 20:54
pangding
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:北京
等 级:贵宾
威 望:94
帖 子:6784
专家分:16751
注 册:2008-12-20
收藏
得分:0 
看来我的帖子根本没有关心呀?

如果看了的话,写的程序应该是这样:
程序代码:
for (z = 1; z <= 12; z++) {
    y = 50 - 4*z;
    x = 50 - y - z;
    printf(...);
}
这种东西算清楚了就不用再判断了。不用两个 for,也不用 if。
2011-04-08 08:23
hjywyj
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:3
帖 子:1114
专家分:2611
注 册:2010-4-14
收藏
得分:0 
int a,b,c,m=0;
for(a=0;a<100;a++)
for(b=0;b<100;b++)
for(c=0;c<100;c++)
if(a+2*b+5*c==100&&a+b+c==50)
{printf("一分:%d,二分:%d,五分:%d\n",a,b,c);
m++;}
printf("方案有%d个",m);
2011-04-08 09:09
快速回复:一元纸币兑换一分、二分和五分的硬币,帮我一下,谢谢!
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.025190 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved