在这道题之前,我要先介绍一种经典的问题“百文白鸡”的解法。

问题大致为:鸡翁一只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组合(“百文白鸡”穷举法)相关推荐

  1. php学习基础篇之基础函数(数学 日期 字符串)、php循环流程控制

    知识点: 一 . 基础函数(数学 日期 字符串) 二 . php循环流程控制 一 . 基础 函数(数学 日期 字符串) 函数 : 执行某项功能的特定代码. sin()  cos() 数学中 sin(3 ...

  2. Java基础重温_06:Debug模式(打断点、下一步),基础练习案例(减肥计划if,switch版本、逢七跳过、不死神兔、百钱白鸡、数组元素(求和,索引位置,反转)、判断数组是否相同、评委打分)

    1.IDEA,Debug模式 是供程序员使用的程序调试工具,它可以用于查看程序的执行流程,也可以用于追踪程序执行过程来调试程序. 基础练习案例 1.减肥计划if版本 案例需求 ​ 输入星期数,显示今天 ...

  3. 百鸡问题用计算机什么法解决,《穷举法解决问题》教学设计

    一.教学目标 1.知识与技能 ⑴了解穷举法的基本概念及用穷举法设计算法的基本过程. ⑵分析建立正确的数学模型,归纳穷举法穷举技巧. ⑶能够根据具体问题的要求,使用穷举法设计算法,编写程序求解问题. 2 ...

  4. java百元买百兔 穷举法_JAVA--算法与数据结构- 逢7过百钱白鸡不死神兔【1/100】...

    1.逢7过 /* * 数据范围 1- 100 * 碰到能被7整除或者包含7都过 * */ public class MeetSeven { public static void main(String ...

  5. C语言 穷举法 百元买百鸡问题。

    穷举法,百元买百鸡问题 中国古代数学家张丘建在他的<算经>中提出了一个著名的"百元买百鸡"的问题 鸡翁一,值钱五,鸡母一,值钱三,鸡雏三,值钱一,百元买百鸡,问翁,母, ...

  6. 穷举法解百马百担问题

    2021 03 30 //7 - 17 循环结构17:穷举法解百马百担问题(10 分) //有100匹马驮100担货,已知1匹大马驮3担 //1匹中马驮2担,2匹小马驮1担,问大中小马各几匹 //输出 ...

  7. python百钱买百鸡问题算法_好玩的Python:植树问题,平闰年,鸡兔同笼,百钱白鸡,属相问题...

    Python用来解决日常生活中的小问题很容的. # 植树问题 total = 1 age = 1 while total <= 100: age += 1 total += age print( ...

  8. Console-算法[for]-穷举法:百钱买百鸡

    ylbtech-Arithmetic:Console-算法[for]-穷举法:百钱买百鸡 1.A,案例 -- ============================================= ...

  9. Craps赌博游戏、百钱白鸡、七星彩选号、抓小偷、21根火柴、10000以内完美数

    Craps赌博游戏 游戏规则:同时扔两颗骰子,第一次扔出的点数数7或则11玩家胜,扔出2.3或则12庄家胜利,否则继续扔骰子. 以后只要扔出和第一次相同的点数玩家胜,扔出7庄家胜. 玩家每次进入有10 ...

最新文章

  1. 【MediaPipe】(4) AI视觉,远程手势调节电脑音量,附python完整代码
  2. 分享这两年从事Linux系统运维行业的感受
  3. python 中cookie_使用Python分析Cookies
  4. 小红书shield算法分析
  5. 【二】Jmeter:测试计划(Test Plan)
  6. 8086cpu学习笔记(1):系统结构
  7. 图像处理——采样与量化
  8. Java网络编程实现
  9. 灵界的科学丨五、心灵与意识的科学奥祕
  10. 固态硬盘安装系统时显示,windows无法完成格式化解决办法。
  11. outland服务器注册,Warmane TBC服(Outland)5月20日正式开服 规则介绍与问答
  12. 云上城之个服务器维护时间,云上城之歌开服时间表 官方最新开服情况
  13. 轻松认识HTTP协议的概念和工作原理
  14. linux 硬盘满了如何处理
  15. keil c语言 延迟程序,Keil C51程序设计中几种精确延时方法
  16. 显卡 内存分配 linux,【原创】Linux环境下的图形系统和AMD R600显卡编程(4)——AMD显卡显存管理机制...
  17. matlab的主要功能与应用领域,MatLab的特点及应用领域?
  18. 风控数据分析师,有哪四大分析工具必须掌握的?
  19. 全球及中国地理信息产业应用建设发展及产值规模预测报告2021-2027
  20. 主流支付平台的业务流程简介

热门文章

  1. IO、存储、硬盘、文件系统相关常识
  2. 寒假“最小生成树”题解
  3. 【verilog】vivado警告:constrast value is trancated to fit in....
  4. 分清春夏上火的类型 对症降火各有招数
  5. delphi 裁剪mp3_如何在Delphi中读取用于音频处理的MP3文件?[关闭]
  6. 判断浏览器是否支持wap
  7. 我如何看待软件测试的前景?
  8. 我的时间管理——短期计划与长期计划
  9. 自卑与超越-现代修心有声小说
  10. Python 实现矩阵分解