ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

C++解决鸡兔同笼进阶

2022-02-20 05:06:56  阅读:258  来源: 互联网

标签:字符 鸡兔同笼 进阶 48 int C++ next char 100


鸡兔同笼进阶


问题描述: 有一群鸡和一群兔,它们的只数相同,它们的脚数都是三位数,且这两个三位数的数字分别是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;
/*
	s[i] != a + i + 48解释:
	s[i] 代表正序存储的数字
	i 代表正序存储的自然数0(1,2,3,4,5)
	a + i + 48(a被设置为空)代表 代表数字i的字符
	如果s[i] 不等于 正序存储的自然数, 那么它就不符合要求
	
*/

全部代码:

#include <iostream>
#include <algorithm>
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;
}

标签:字符,鸡兔同笼,进阶,48,int,C++,next,char,100
来源: https://blog.csdn.net/weixin_54027333/article/details/122922671

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有