穷举法c语言吃饭,C语言穷举法经典例题
枚举法(穷举法),“笨人之法”:把所有可能的情况一一测试,筛选出符合条件的各种结果进行输出。,分析:这是个不定方程——三元一次方程组问题(三个变量,两个方程)x+y+z=1005x+3y+z/3=100设公鸡为x只,母鸡为y只,小鸡为z只。,,百元买百鸡问题分析,,,,,x+y+z=1005x+3y+z/3=100,,三重循环,voidmain(){intx,y,z;for(x=0;x<=100;x++)for(y=0;y<=100;y++)for(z=0;z<=100;z++){if(x+y+z==100}},结果:x=0,y=25,z=75x=4,y=18,z=78x=8,y=11,z=81x=12,y=4,z=84,【讨论】为什么多了几组解?,,?,百元买百鸡问题分析,voidmain(){intx,y,z;for(x=0;x<=100;x++)for(y=0;y<=100;y++)for(z=0;z<=100;z++){if(z%3==0}},结果:x=0,y=25,z=75x=4,y=18,z=78x=8,y=11,z=81x=12,y=4,z=84,【讨论】此为“最笨”之法——要进行101101101=1030301次(100多万次)运算。,,优化,voidmain(){intx,y,z;for(x=0;x<=100;x++)for(y=0;y<=100;y++){z=100-x-y;if(z%3==0}},【讨论】令z=100-x-y只进行101101=10201次运算(前者的1%),取x<=20,y<=33只进行2134=714次运算(第1种运算的6.9e-4),,,,,继续优化,voidmain(){intx,y,z;for(x=0;x<=14;x++)for(y=0;y<=25;y++)if(7*x+4*y==100){z=100-x-y;printf("cocks=%d,hens=%d,chickens=%d\n",x,y,z);}},取x<=14,y<=25只进行1526=390次运算,课堂讨论:谁做的好事?有四位同学中的一位做了好事,不留名,表扬信来了之后,校长问这四位是谁做的好事。A说:不是我。B说:是C。C说:是D。D说:C胡说。已知三个人说的是真话,一个人说的是假话。现在要根据这些信息,找出做了好事的人。,编程思路:如何找到该人,一定是“先假设该人是做好事者,然后到每句话中去测试看有几句是真话”。“有三句是真话就确定是该人,否则换下一人再试”。比如,先假定是A同学,让thisman=A;代入到四句话中A说:thisman!=‘A’;‘A’!=‘A’假,值为0。B说:thisman==‘C’;‘A’==‘C’假,值为0。C说:thisman==‘D’;‘A’==‘D’假,值为0。D说:thisman!=‘D’;‘A’!=‘D’真,值为1。显然,不是A做的好事(四个关系表达式值的和为1),再试B同学,让thisman=‘B’;代入到四句话中A说:thisman!=‘A’;‘B’!=‘A’真,值为1。B说:thisman==‘C’;‘B’==‘C’假,值为0。C说:thisman==‘D’;‘B’==‘D’假,值为0。D说:thisman!=‘D’;‘B’!=‘D’真,值为1。显然,不是B所为(四个关系表达式值的和为2),再试C同学,让thisman=‘C’;代入到四句话中A说:thisman!=‘A’;‘C’!=‘A’真,值为1。B说:thisman==‘C’;‘C’==‘C’真,值为1。C说:thisman==‘D’;‘C’==‘D’假,值为0。D说:thisman!=‘D’;‘C’!=‘D’真,值为1。显然,就是‘C’做了好事(四个关系表达式值之和为3)这时,我们可以理出头绪,要用枚举法,一个人一个人地去试,四句话中有三句为真,该人即所求。,#includevoidmain(){charthisman;intsa,sb,sc,sd,cond;for(thisman=A;thisman<=D;thisman++){sa=(thisman!=A);sb=(thisman==C);sc=(thisman==D);sd=(thisman!=D);cond=sa+sb+sc+sd;if(cond==3)printf("做好事的人是:%c\n",thisman);}},利用穷举法求解趣味智力题,(韩信点兵)韩信有一队兵,他想知道有多少人,便让士兵排队报数。按从1至5报数,最末一个士兵报的数为1;按从1至6报数,最末一个士兵报的数为5;按从1至7报数,最末一个士兵报的数为4;最后再按从1至11报数,最末一个士兵报的数为10。你知道韩信至少有多少兵吗?设兵数为x,则x应满足:x%5==1for(x=1;x<5000;x++){if(x%5==1}}}/*属于“瞎猫碰死耗子”的做法*/,穷举法求解韩信点兵,#includevoidmain(){intx;for(x=1;;x++){if(x%5==1}}}/*死循环——永远不会退出的循环*/,穷举法求解韩信点兵,穷举法求解韩信点兵:方案1-goto,#includevoidmain(){intx;for(x=1;;x++){if(x%5==1},穷举法求解韩信点兵:方案2-break,#includevoidmain(){intx;for(x=1;;x++){if(x%5==1}}},穷举法求解韩信点兵:方案3-标志变量,#includevoidmain(){intx;intfind=0;/*设置找到标志为假*/for(x=1;!find;x++){if(x%5==1}}},
展开阅读全文
穷举法c语言吃饭,C语言穷举法经典例题相关推荐
- 【C语言|菜鸟教程】100道进阶经典例题详细解答(实例一)
[C语言|菜鸟教程]100道基础经典例题详解(实例一) 文章目录 前言 一.题目描述 二.题目分析 三.解题 (1)解题方法一 1. 思路 2. 程序运行 3. 程序运行结果 (2)解题方法二 1. ...
- 【C语言|菜鸟教程】100道进阶经典例题详细解答(实例二)
文章目录 前言 一.题目描述 二.题目分析 三.解题 (1)解题方法一----if-else if语句 1. 思路 2. 程序运行 3. 程序运行结果 (2)解题方法二----if-else if语句 ...
- 解决回溯法 - 回溯到底是个什么东西(含有大量经典例题加详细分析)
文章目录 一 .用最通俗的话解释回溯思想: 二.经典例子 1.经典样例1:(01背包问题的回溯解法) 2. 经典样例二:N皇后问题 3. 经典样例三:油田问题 4. 经典样例四:素数环问题 5. 经典 ...
- c语言变量相等问题穷举法,C语言穷举法经典例题.ppt
<C语言穷举法经典例题.ppt>由会员分享,可在线阅读,更多相关<C语言穷举法经典例题.ppt(18页珍藏版)>请在人人文库网上搜索. 1.枚举法(穷举法),"笨人之 ...
- c语言穷举法举例,C语言穷举法经典例题.ppt
<C语言穷举法经典例题.ppt>由会员分享,可在线阅读,更多相关<C语言穷举法经典例题.ppt(18页珍藏版)>请在人人文库网上搜索. 1.枚举法(穷举法),"笨人之 ...
- C语言排序方法-----二元选择排序法
上一篇文章C语言排序方法-----选择排序法中分析了选择排序法,这篇文章分析一下选择排序法的优化算法,二元选择排序法,在选择排序法中每次找一个最大或者最小的数据放到开始位置,那么为了提高效率可以每次比 ...
- 蛮力法查找有序数列c语言,算法——蛮力法之选择排序和冒泡排序c++实现
这次实现的是蛮力法中的两个例子,选择排序法和冒泡排序法,使用的编译环境是vs2013,下面对这两个算法做一个简单介绍,然后是两个算法的c++实现代码. 选择排序法比较的范围是整个列表,每次扫描结束找出 ...
- C语言编程规范之匈牙利命名法
匈牙利命名法 匈牙利命名法是一种编程时的命名规范.基本原则是:变量名=属性+类型+对象描述,其中每一对象的名称都要求有明确含义,可以取对象名字全称或名字的一部分.要基于容易记忆容易理解的原则 ...
- c语言尾插法步骤,头插法-顺序输出,尾插法-反向输出(C语言)
#include #include #include typedef struct node{ int data; struct node *next; }Node, *pNode; pNode re ...
最新文章
- ubuntu 12.04 添加 IP并配置DNS
- 清华导学故事|卓晴:在每个人生阶段中,找到自己的定位
- mysql封装成类_python操作mysql封装成类
- IOS-webService
- [转]默认构造函数的作用
- K8S完整部署项目实战案例
- wxWidgets:内存检查示例
- PHP对Json字符串解码返回NULL的一般解决方案
- linux --- 基础指令
- Python压平嵌套列表的一种方法
- umask 文件预设权限掩码
- java|jsp类成品展示_jsp学生诚信素质评价系统
- pop3协议手机开通服务器,手机服务器pop3设置方法
- Linux系统封装及配置
- h264格式视频转mp4
- 数字转换大写 python_数字转换
- less转换css及html里面JS的引入
- 垃圾分类数据集(垃圾图片数据集)
- Unreal4引擎开发学习日志
- ehvierwer登录与不登录_【虎嗅早报】抖音回应无法用微信账号登录:不清楚是否为人为...