【多重循环】【流程控制】abc组合(“百文白鸡”穷举法)
在这道题之前,我要先介绍一种经典的问题“百文白鸡”的解法。
问题大致为:鸡翁一只5块,鸡母一只3块,三只鸡雏1块,请问100块可以买多少组合,最终的鸡数必须也是100只。
在C语言中,解决这样情况较多,但是关联点在于钱数加和确定的问题,可以用多重循环来解决。由于我找不到百文白鸡的原题,下面用一个类似的问题来充当引例:
【换硬币问题】
将一笔零钱换成5分、2分和1分的硬币,要求每种硬币至少有一枚,有几种不同的换法?
输入格式:
输入在一行中给出待换的零钱数额x∈(8,100)。
输出格式:
要求按5分、2分和1分硬币的数量依次从大到小的顺序,输出各种换法。每行输出一种换法,格式为:“fen5:5分硬币数量, fen2:2分硬币数量, fen1:1分硬币数量, total:硬币总数量”。最后一行输出“count = 换法个数”。
输入样例:
13
输出样例:
fen5:2, fen2:1, fen1:1, total:4
fen5:1, fen2:3, fen1:2, total:6
fen5:1, fen2:2, fen1:4, total:7
fen5:1, fen2:1, fen1:6, total:8
count = 4
已经说过,这类问题分类情况较多,但是关联点在于加和给定,属于“百文白鸡”类型的问题。我们先看代码:
#include<stdio.h>
int main(void)
{int a;scanf("%d",&a);int i,j,k;int sum=0,p=0;for (i=a/5; i>0; i--){for (j=a/2; j>0; j--){for (k=1; k<=a; k++){p=k+j*2+i*5;if (p==a) {printf("fen5:%d, fen2:%d, fen1:%d, total:%d\n",i,j,k,i+j+k);sum++;p=0;}else p=0;}}}printf("count = %d",sum);return 0;}
整个程序的核心在于一个“三重循环”。
for (i=a/5; i>0; i--){for (j=a/2; j>0; j--){for (k=1; k<=a; k++){p=k+j*2+i*5;if (p==a) {printf("fen5:%d, fen2:%d, fen1:%d, total:%d\n",i,j,k,i+j+k);sum++;p=0;}else p=0;}}}
观察这段代码,其实不难理解:
如果k+2j+5i加和不满足条件,则最内循环变量k首先递增来迎合当前的j和i。k一轮循环如果还是不满足条件,那么接下来中间循环变量j会递增1,再让内循环k循环一轮……如此反复,必能遍历到所有满足条件的情况。
.
.
.
学会了这样的流程控制方法,我们来看这道题:
【abc组合问题】
问题描述
已知abc+cba=n,其中a,b,c均为一位数,1000<n<2000,编程求出满足条件的a,b,c所有组合。
输入说明
一个整数n
输出说明
按照整数abc从小到大的顺序,输出a, b, c, 用空格分隔,每输出一组a,b,c后换行.
输入样例
1352
输出样例
3 7 9
4 7 8
5 7 7
6 7 6
7 7 5
8 7 4
9 7 3
我们看,这道题也是情况繁多,但是关联点在于abc+cba=n的条件是始终不变的。
那么,我们想,把a、b、c分别最为三层循环的变量,最内循环节的判断语句是abc+cba是否为n,这样就能遍历到所有的情况了!同时我们也发现,这其实也是一道“百文白鸡”类型的题目,只是比较隐晦罢了!
理解到这一步,我们开始写程序吧:
#include<stdio.h>int judge (int a,int b,int c)
{int x;int y;x=a*100+b*10+c;y=c*100+b*10+a;return x+y;
}int main (void)
{int x;scanf("%d",&x);int a,b,c;for (a=0; a<=9; a++){for (b=0; b<=9; b++){for (c=0; c<=9; c++){if (judge(a,b,c)==x){printf("%d %d %d\n",a,b,c);}}}}return 0;
}
以上是“百文白鸡”一类题的小总结,以后还有类似题也会在此做添加。不足之处请多多指正!
【多重循环】【流程控制】abc组合(“百文白鸡”穷举法)相关推荐
- php学习基础篇之基础函数(数学 日期 字符串)、php循环流程控制
知识点: 一 . 基础函数(数学 日期 字符串) 二 . php循环流程控制 一 . 基础 函数(数学 日期 字符串) 函数 : 执行某项功能的特定代码. sin() cos() 数学中 sin(3 ...
- Java基础重温_06:Debug模式(打断点、下一步),基础练习案例(减肥计划if,switch版本、逢七跳过、不死神兔、百钱白鸡、数组元素(求和,索引位置,反转)、判断数组是否相同、评委打分)
1.IDEA,Debug模式 是供程序员使用的程序调试工具,它可以用于查看程序的执行流程,也可以用于追踪程序执行过程来调试程序. 基础练习案例 1.减肥计划if版本 案例需求 输入星期数,显示今天 ...
- 百鸡问题用计算机什么法解决,《穷举法解决问题》教学设计
一.教学目标 1.知识与技能 ⑴了解穷举法的基本概念及用穷举法设计算法的基本过程. ⑵分析建立正确的数学模型,归纳穷举法穷举技巧. ⑶能够根据具体问题的要求,使用穷举法设计算法,编写程序求解问题. 2 ...
- java百元买百兔 穷举法_JAVA--算法与数据结构- 逢7过百钱白鸡不死神兔【1/100】...
1.逢7过 /* * 数据范围 1- 100 * 碰到能被7整除或者包含7都过 * */ public class MeetSeven { public static void main(String ...
- C语言 穷举法 百元买百鸡问题。
穷举法,百元买百鸡问题 中国古代数学家张丘建在他的<算经>中提出了一个著名的"百元买百鸡"的问题 鸡翁一,值钱五,鸡母一,值钱三,鸡雏三,值钱一,百元买百鸡,问翁,母, ...
- 穷举法解百马百担问题
2021 03 30 //7 - 17 循环结构17:穷举法解百马百担问题(10 分) //有100匹马驮100担货,已知1匹大马驮3担 //1匹中马驮2担,2匹小马驮1担,问大中小马各几匹 //输出 ...
- python百钱买百鸡问题算法_好玩的Python:植树问题,平闰年,鸡兔同笼,百钱白鸡,属相问题...
Python用来解决日常生活中的小问题很容的. # 植树问题 total = 1 age = 1 while total <= 100: age += 1 total += age print( ...
- Console-算法[for]-穷举法:百钱买百鸡
ylbtech-Arithmetic:Console-算法[for]-穷举法:百钱买百鸡 1.A,案例 -- ============================================= ...
- Craps赌博游戏、百钱白鸡、七星彩选号、抓小偷、21根火柴、10000以内完美数
Craps赌博游戏 游戏规则:同时扔两颗骰子,第一次扔出的点数数7或则11玩家胜,扔出2.3或则12庄家胜利,否则继续扔骰子. 以后只要扔出和第一次相同的点数玩家胜,扔出7庄家胜. 玩家每次进入有10 ...
最新文章
- 【MediaPipe】(4) AI视觉,远程手势调节电脑音量,附python完整代码
- 分享这两年从事Linux系统运维行业的感受
- python 中cookie_使用Python分析Cookies
- 小红书shield算法分析
- 【二】Jmeter:测试计划(Test Plan)
- 8086cpu学习笔记(1):系统结构
- 图像处理——采样与量化
- Java网络编程实现
- 灵界的科学丨五、心灵与意识的科学奥祕
- 固态硬盘安装系统时显示,windows无法完成格式化解决办法。
- outland服务器注册,Warmane TBC服(Outland)5月20日正式开服 规则介绍与问答
- 云上城之个服务器维护时间,云上城之歌开服时间表 官方最新开服情况
- 轻松认识HTTP协议的概念和工作原理
- linux 硬盘满了如何处理
- keil c语言 延迟程序,Keil C51程序设计中几种精确延时方法
- 显卡 内存分配 linux,【原创】Linux环境下的图形系统和AMD R600显卡编程(4)——AMD显卡显存管理机制...
- matlab的主要功能与应用领域,MatLab的特点及应用领域?
- 风控数据分析师,有哪四大分析工具必须掌握的?
- 全球及中国地理信息产业应用建设发展及产值规模预测报告2021-2027
- 主流支付平台的业务流程简介
热门文章
- IO、存储、硬盘、文件系统相关常识
- 寒假“最小生成树”题解
- 【verilog】vivado警告:constrast value is trancated to fit in....
- 分清春夏上火的类型 对症降火各有招数
- delphi 裁剪mp3_如何在Delphi中读取用于音频处理的MP3文件?[关闭]
- 判断浏览器是否支持wap
- 我如何看待软件测试的前景?
- 我的时间管理——短期计划与长期计划
- 自卑与超越-现代修心有声小说
- Python 实现矩阵分解