C语言:凑硬币(两元硬币的组合方案)
一元硬币的组合
- 算法思路:
1、一元硬币可以分成1、2、5角等组成
2、可以采用控制变量来进行枚举试验;
3、将可以构成指定元的组合方案进行输出。 - 代码如下:
#include<stdio.h>
int main()
{int x;int one,two,five;printf("请输入元:");scanf("%d",&x);for(one = 1; one < x*10;one++){for(two = 1;two<x*10/2;two++){for(five =1;five<x*10/5;five++){if(one+two*2+five*5==x*10)printf("可以用%d个一角加%d个二角加%d个5角得到%d元\n",one,two,five,x);}}}return 0;
}输出结果:请输入元:1可以用1个一角加2个二角加1个5角得到1元可以用3个一角加1个二角加1个5角得到1元--------------------------------Process exited after 1.101 seconds with return value 0请按任意键继续. . .
代码分析:
这里的三重循环用的是控制变量的方法,当one=1时循环进入two;two=1时循环进入five;five=1时发现if语句one+two2+five5==x*10为假,随即跳出循环two++执行后two=2,在进入five循环,以此类推;可以在Dev C++中设置断点后,使用debug来观察下程序的具体运行步骤。
凑硬币(只找一种方案)
- 代码思路:
只要一种方案就要求对其它存在的方案进行打断,即跳出当前所有的循环语句;
这时候需要用到break语句进行接力。 - 代码如下:
#include<stdio.h>
int main()
{int x;int one,two,five;int exit = 0;printf("请输入元:");scanf("%d",&x);for(one = 1; one < x*10;one++){for(two = 1;two<x*10/2;two++){for(five =1;five<x*10/5;five++){if(one+two*2+five*5==x*10){printf("可以用%d个一角加%d个二角加%d个5角得到%d元\n",one,two,five,x);exit = 1;break; }}if(exit==1) break;}if(exit==1) break; }return 0;
}代码输出:请输入元:2可以用1个一角加2个二角加3个5角得到2元--------------------------------Process exited after 1.112 seconds with return value 0请按任意键继续. .
代码分析:
这个程序巧妙之处在于当最内层循环的条件语句不运行时,不会发生打断其它的循环进程,一旦最内层循环进程被执行时,设置的break计数器便发生改变,从而影响其它循环进程不执行,相当于链式反应,直接跳出所有循环,这里break计数变量设置的十分巧妙。
- goto函数实现凑硬币
代码如下:
//凑硬币goto函数#include<stdio.h>
int main()
{int x;int one,two,five;int exit = 0;printf("请输入元:");scanf("%d",&x);for(one = 1; one < x*10;one++){for(two = 1;two<x*10/2;two++){for(five =1;five<x*10/5;five++){if(one+two*2+five*5==x*10){printf("可以用%d个一角加%d个二角加%d个5角得到%d元\n",one,two,five,x);goto out; }}} }out:return 0;
}程序输出:请输入元:2可以用1个一角加2个二角加3个5角得到2元--------------------------------Process exited after 1.652 seconds with return value 0请按任意键继续. . .
代码分析:
goto函数可以便捷的实现多重循环中的跳转,不过慎用goto函数以免造成不必要麻烦;另外大型项目为了便于维护,一般不使用goto。
C语言:凑硬币(两元硬币的组合方案)相关推荐
- C语言打印字符串的所有排列组合(附完整源码)
C语言打印字符串的所有排列组合 字符串的所有排列问题 C语言打印字符串的所有排列组合的完整源码(定义,实现,main函数测试) 字符串的所有排列问题 示例:ABC的排列是ABC,ACB,BCA,BAC ...
- 硬币 假硬币 天平_小东西叫硬币
硬币 假硬币 天平 During the last 1,5 years, I've been traveling a lot. Apart from my must-have things like ...
- C语言精度控制整形,C语言 凑算式 控制精度问题
想问一下,if语句中为什么写上*1.0之后,输出的就是对的个数29,但把*1.0删掉后,输出的个数就远大于29了? 还想讨教一下各位高手,除了这种暴力求法,还有其他的比较好的方法吗?非常感谢 /* 凑 ...
- R语言使用choose函数计算排列组合:组合数(输入两个参数、combination)
R语言使用choose函数计算排列组合:组合数(输入两个参数.combination) 目录 R语言使用choose函数计算组合数(输入两个参数.combination) R 语言特点 R语言使用ch ...
- 均方根误差不超过_描述数值预报随机误差的利器:随机物理扰动组合方案
添加新云天气象主编微信或QQ:130188121,及时获取或发布气象升学.就业.会议.征稿及学术动态等信息! 大气的混沌特性以及数值预报初值及模式等误差使单一数值预报具有不确定性,那么,如何描述单一确 ...
- B2B行业网站10种经营模式研究及组合方案
许多人对B2B网站的理解仅停留在企业对企业的在线交易上,认为按照B2B电子商务的概念就应该是在网上进行交易.但目前中国比较成功的B2B网站却并非所有都是在线交易模式,尤其是B2B行业网站,许多都没有做 ...
- IM推送保障及网络优化详解(二):如何做长连接加推送组合方案
对于移动APP来说,IM功能正变得越来越重要,它能够创建起人与人之间的连接.社交类产品中,用户与用户之间的沟通可以产生出更好的用户粘性. 在复杂的 Android 生态环境下,多种因素都会造成消息推送 ...
- [算法] 麻将序数牌组合方案
// 环境: centos7.2, g++ v4.8.5#include <iostream> #include <unistd.h> #include <stdio.h ...
- iOS小知识:解决部分英文国际化没有生效的问题(一个语言对应多个字符串资源文件的方案)
文章目录 前言 一个语言对应多个字符串资源文件的方案 see also 前言 问题:中文可以解析,英文无法解析.后来发现是存储英文的文件内容太长了modified: retail/retail/cla ...
最新文章
- 大数据目标检测推理管道部署
- 详解亚马逊:物流为何是电商命脉
- layer.open 模态弹窗, 隐藏关闭按钮, 隐藏按钮组
- Java NIO系列教程(五) 通道之间的数据传输
- Parsing XML in J2ME
- 宝塔 面板 放行端口
- Java自动化获取页面主题_基于Selenium2+Java的UI自动化(4) - WebDriver API简单介绍
- 12分钟即达背后的智能支撑
- 梯度下降-单变量线性回归-理论+代码+解释
- python将缺失值用0代替_平滑而不使用零填充缺失值
- 3ds MAX 2016破解激活详细步骤分享
- 惠威T200B刷机 Q群
- mysql性能分析工具_MySQL性能分析、及调优工具使用详解
- 对事件流的小故事理解
- 李一男荡人心魄的戏剧化人生
- 镁光闪存颗粒对照表_内存颗粒型号识别
- c语言启动程序句柄无效,U盘上打开EXE文件提示句柄无效
- Oracle安装与配置(Linux)
- 盘点2019年PHP高级开发工程师面试题及答案汇总
- 在Android手机上安装Ubuntu完整版