【跳出for循环嵌套】公鸡五文钱一只,母鸡三文钱一只,小鸡三只一文钱。问:用m文钱买m只鸡,公鸡、母鸡、小鸡各买多少只?并输出最小购买公鸡的数,并增加无解答案。
此题是百元买百鸡(C)的升级版
1.增加了用m文钱买m只鸡的要求,解决这个问题我们只需添加一个scanf函数即可。
2.输出最小可购买公鸡的数。
3.增加无解答案。
主要思路是用枚举法做,就是多个for循环嵌套,用if判断成立条件,暴力解方程式即可。思路很简单,这里有两个小问题。
一、最小公鸡数
由于多个for循环嵌套的步骤是外部执行一次,内部全部执行,而外部又从最小值开始自增。那么当条件方程式第一次成立时,最外部的自增元素一定是众多成立情况中最小的那一个。所以我们用最外层的自增元素去表示公鸡数就可以得出满足要求的最小公鸡数。求最小母鸡,小鸡也是同理。
那既然求出了最小公鸡数,就没有必要再次循环计算了,只需输出第一次方程式成立的值。那该如何跳出多个for循环呢?本文对此详细讨论。
二、跳出嵌套for循环的方法(主要内容)
1. 直接return 0; 函数结束程序。此方法只适用后面没有代码的情况,简单粗暴。
# include<stdio.h>
int main()
{int m, sum = 0;scanf_s("%d", &m);for (int i = 0; i <= m; ++i) //i表示公鸡数{for (int j = 0; j <= m; ++j){for (int k = 0; k * 3 <= m; ++k)//把3只小鸡视为1捆,按捆去买,1捆就是三只小鸡,1分钱{if (i * 5 + j * 3 + k == m && i + j + k * 3 == m)//k是捆数{printf("%d文钱可买最少的公鸡数为%d只,母鸡%d只,小鸡%d只\n", m, i, j, k * 3);return 0;//第一次输出后,结束程序。}}}}
}
但题目要求我们输出无解答案,那就不能使用return 0;结束程序了。(或者用exit)
2.将for循环写入 bool函数
bool 含数可以返回真假, 当与if套用时,如果我们只规定一个返回值
bool函数默认返回 true
# include<stdio.h>
bool f(int m)
{if (m == 0)return false;
}
void main()
{int m;scanf_s("%d", &m); // 输入0 , 输出为falseif (f(bool(m))) // 输入除0以外的值 输出为 trueprintf("true");elseprintf("false");
}
所以:
我们用bool函数将for循环存入,只对数据进行处理,bool函数会帮我们返回真, 这样也跳出了for循环
bool f(int m)
{for (int i = 0; i <= m; ++i){for (int j = 0; j <= m; ++j){for (int k = 0; k * 3 <= m; ++k){if (i * 5 + j * 3 + k == m && i + j + k * 3 == m && i < j && i < k * 3)return false;}}}
}
int main()
{int m;scanf_s("%d", &m);if (f(m))printf("No answer");else{for (int i = 0; i <= m; ++i){for (int j = 0; j <= m; ++j){for (int k = 0; k * 3 <= m; ++k){if (i * 5 + j * 3 + k == m && i + j + k * 3 == m){printf("%d %d %d", i, j, k * 3);return 0;}}}}}
}
3. 跳出外层的for循环 (推荐)
如果单独用break;的话,是不能结束整个for循环的
所以我们要引入一个判断变量flag,并结合if判断,如果满足条件,就题用break打断外部的for,这样内部就不会执行啦!
# include<stdio.h>
int main()
{int m, sum = 0, flag = 0;scanf_s("%d", &m);for (int i = 0; i <= m; ++i){if (falg == 1) break; //只写这里也可以 需要break我也不知道多少次 也实现了不执行内部for的目的for (int j = 0; j <= m; ++j){if (falg == 1) break; //只写这里也可以 需要break我也不知道多少次for (int k = 0; k * 3 <= m; ++k){if (i * 5 + j * 3 + k == m && i + j + k * 3 == m && i < j && i < k * 3){printf("%d文钱可买最少公鸡数为%d只,母鸡%d只,小鸡%d只\n", m, i, j, k * 3);flag = 1;break;}}}}if (flag == 0) //不满足条件则无解printf("No Answer");return 0;
}
也可以优化如下
#include <stdio.h>
int main()
{int m, flag = 0;scanf("%d", &m);for (int i = 0; i <= m / 5; i++) //减少循环次数{if (flag == 1)break; //跳出最外层for即可for (int j = 0; j <= m / 3; j++){int k = m - i - j; //减少for循环if (k + j * 9 + i * 15 == m * 3){printf("%d %d %d", i, j, k);flag = 1;break;}}}if (flag == 0)printf("No Answer");return 0;
}
【跳出for循环嵌套】公鸡五文钱一只,母鸡三文钱一只,小鸡三只一文钱。问:用m文钱买m只鸡,公鸡、母鸡、小鸡各买多少只?并输出最小购买公鸡的数,并增加无解答案。相关推荐
- SQL连接操作符介绍(循环嵌套, 哈希匹配和合并连接)
今天我将介绍在SQLServer 中的三种连接操作符类型,分别是:循环嵌套.哈希匹配和合并连接.主要对这三种连接的不同.复杂度用范例的形式一一介绍. 本文中使用了示例数据库AdventureWorks ...
- python两层for循环嵌套的执行过程_Python for循环嵌套
Python for循环嵌套教程 Python for循环嵌套详解 语法 for i in cond1 { # do something for j in cond2 { for k in cond3 ...
- 统计一个整数的所有因子的个数_【题解循环嵌套】1095:数1的个数
1095:数1的个数时间限制: 1000 ms 内存限制: 65536 KB [题目描述] 给定一个十进制正整数n(1≤n≤10000),写下从1到n的所有整数,然后数一下其中出现的数字&quo ...
- 多层嵌套break跳出指定循环
平常break最常出现的就是在for循环或者while循环中跳出到当前循环,但是在多层循环嵌套下break还能跳出指定的循环 语法结构如下 "自己定义的名称" : {for|whi ...
- 要求用 100 元买 100 只鸡,其中公鸡五元一只,母鸡三元一只,小鸡 1 元三只,规定每种至少买一 只
要求用 100 元买 100 只鸡,其中公鸡五元一只,母鸡三元一只,小鸡 1 元三只,规定每种至少买一 只 public static void main(String[] args) {for(in ...
- 公鸡3块钱1只,母鸡5块钱1只,小鸡1块钱3只,用100块买100只鸡,一共多少种买法,分别是什么?
公鸡3块钱1只,母鸡5块钱1只,小鸡1块钱3只,用100块买100只鸡,一共多少种买法,分别是什么? //2.公鸡3块钱1只,母鸡5块钱1只,小鸡1块钱3只,用100块买100只鸡,一共多少种买法,分 ...
- break跳出两个嵌套的for循环
List<Integer> list=new ArrayList<>();List<Integer> list1=new ArrayList<>(); ...
- C#语句——循环语句(for循环与for循环嵌套)
循环:反复执行某段代码. 循环四要素:初始条件,循环条件,循环体,状态改变. for(初始条件;循环条件;状态改变) { 循环体 } break --中断循环,跳出整个循环 continue--停止本 ...
- 《零基础看得懂的C语言入门教程 》——(九)C语言二维数组与循环嵌套
一.学习目标 了解二维数组的使用方法 了解循环嵌套的使用方法 目录 C语言真的很难吗?那是你没看这张图,化整为零轻松学习C语言. 第一篇:(一)脱离学习误区 第二篇:(二)C语言没那么难简单开发带你了 ...
最新文章
- webpack的基本配置项
- Django CMS介绍(转载)
- java merge into_Oracle merge into的使用
- 《重构-改善既有代码的设计》-第1例:租赁影片(2)
- spring boot 中文文档地址
- java列表展开折叠,Android在开发中的实用技巧之ExpandableListView简单实现商品列表折叠...
- 37、我的C#学习笔记3
- python 开源爬虫工具 kcrawler 一键爬取 房价 掘金小册专栏
- python画立体温度分布图_Origin绘制3D立体温度分布图的方法
- FIT2CLOUD飞致云被权威研究机构评选为中国混合云管理软件领导者
- 智能网关路灯杆智慧照明解决方案
- php 项目创意,JavaScript实现“创意时钟”项目
- java学习路线(阿里p6)
- 3ds max 使用cloth修改器制作抱枕
- UiPath:Windows计划任务调度UiPath(直接调用及.bat方式)
- android qq毛玻璃,腾讯电脑管家桌面整理重磅更新!支持毛玻璃效果!
- oracle数据库审计优点缺点,Oracle数据库安全性:标准数据库审计
- 四步搞定小菊花 Loading 动画
- 联通预存话费送iphone
- 景区售票管理系统,景区票务系统,景区售票系统毕业设计