欢迎您访问365答案网,请分享给你的朋友!
生活常识 学习资料

C++解决鸡兔同笼进阶

时间:2023-05-31
鸡兔同笼进阶

问题描述: 有一群鸡和一群兔,它们的只数相同,它们的脚数都是三位数,且这两个三位数的数字分别是0,1,2,3,4,5.问鸡和兔的只数各是多少?它们的脚数各是多少?第一行输出鸡的数量,兔的数量.第二行输出鸡的腿数,兔的腿数


相较于普通鸡兔同笼问题,这道题多了脚数不定、只数相同的条件
“分别是0,1,2,3,4,5” 说明脚数量组成数字的不定。可以枚举出所有腿的数量一个一个筛。

我们可以把枚举出的两个腿数的数字转为字符后存入数组,排序后如果为正序"012345"就说明条件成立


数字转为字符的核心代码:

char s[6]; //数组存储6个验证字符 int next = 0; //字符数组的指针 void charset(int a) { //填入验证字符 char c1 = a / 100 + 48; a -= (c1 - 48) * 100; //百位 char c2 = a / 10 + 48; a -= (c2 - 48) * 10; //十位 char c3 = a + 48; //个位 s[next] = c1;s[next + 1] = c2;s[next + 2] = c3;next += 3; //移动指针 }

判断条件的第一层范围(只数相同,都是三位数)处理代码:

if (i*2<1000&&i*2>=100 && i*4<1000&&i*4>=100)

判断条件第二层范围(由0,1,2,3,4,5组成)处理代码:

char a;for (int i = 0; i < 6; i ++) if (s[i] != a + i + 48) return false;

全部代码:

#include #include using namespace std;char s[6]; //6个验证字符 int next = 0; //字符数组的指针 void charset(int a) { //填入验证字符 char c1 = a / 100 + 48; a -= (c1 - 48) * 100; //百位 char c2 = a / 10 + 48; a -= (c2 - 48) * 10; //十位 char c3 = a + 48; //个位 s[next] = c1;s[next + 1] = c2;s[next + 2] = c3;next += 3; //移动指针 }bool is_Perfect() { //字符验证 char a;for (int i = 0; i < 6; i ++) if (s[i] != a + i + 48) return false;return true;}int main() {for (int i = 1; i < 250; i ++) {if (i*2<1000&&i*2>=100 && i*4<1000&&i*4>=100) { //判断范围 int x = i * 2, y = i * 4;//填入两次验证字符 charset(x);charset(y);//排序,便于验证 sort(s, s + 6);next = 0;//验证 if (is_Perfect()) {cout << i << ' ' << i << endl;cout << i * 2 << ' ' << i * 4 << endl; }}}return 0;}

Copyright © 2016-2020 www.365daan.com All Rights Reserved. 365答案网 版权所有 备案号:

部分内容来自互联网,版权归原作者所有,如有冒犯请联系我们,我们将在三个工作时内妥善处理。