C++数字游戏求思路 不要代码
1个回答
展开全部
目前没想到更好的方法,先说说当前的思路:
1. 首先暴力破解也不困难,一共1w个数,全部尝试一遍,如果结果只有一个数字满足所有的条件,那么就输出这个数,如果有多个满足的,直接输出Not Sure。当然,可以设想肯定有更好的解法。所以继续思考。
2. 设答案是X。每行的第二个数字是猜对的位数,如果把4位数看成无序的数字集合,这个位数相当于本数字和X的交集元素。第三个数字是猜对的位置数,这个显然意味着有序的排列和X的交集位数。
3. 继续分析,如果1W以内所有的数字都不分顺序,仅仅看成集合,那么一共有多少这样的集合呢?不分顺序,意味着1234和4321是相同的集合,1234共有4!=24种排列方式,所以1W以内可以估算大概有10000/4! = 416个这种集合,实际数字应该略大于416,因为有2222这种数字。所以就估500。也就是说10000个数中,有尝试价值的总共只有500个数。而且这500个数用循环很容易得到。
4. 500个数字暴力破解起来就相当容易了,比起1W个,性能高了20倍。让这500个数字先去试探第二个数字,OK的再去试探第三个数字。
5. 因为每个条件严格程度不同,比如8585 3 3这个条件就比4815 2 1这个条件严格的多,第一轮淘汰的元素也更多,从性能角度讲,应该吧这个条件排前面。
6. 我看时间限制是1s,这个复杂度应该满足要求了。后面想到更好的方法再更新。
1. 首先暴力破解也不困难,一共1w个数,全部尝试一遍,如果结果只有一个数字满足所有的条件,那么就输出这个数,如果有多个满足的,直接输出Not Sure。当然,可以设想肯定有更好的解法。所以继续思考。
2. 设答案是X。每行的第二个数字是猜对的位数,如果把4位数看成无序的数字集合,这个位数相当于本数字和X的交集元素。第三个数字是猜对的位置数,这个显然意味着有序的排列和X的交集位数。
3. 继续分析,如果1W以内所有的数字都不分顺序,仅仅看成集合,那么一共有多少这样的集合呢?不分顺序,意味着1234和4321是相同的集合,1234共有4!=24种排列方式,所以1W以内可以估算大概有10000/4! = 416个这种集合,实际数字应该略大于416,因为有2222这种数字。所以就估500。也就是说10000个数中,有尝试价值的总共只有500个数。而且这500个数用循环很容易得到。
4. 500个数字暴力破解起来就相当容易了,比起1W个,性能高了20倍。让这500个数字先去试探第二个数字,OK的再去试探第三个数字。
5. 因为每个条件严格程度不同,比如8585 3 3这个条件就比4815 2 1这个条件严格的多,第一轮淘汰的元素也更多,从性能角度讲,应该吧这个条件排前面。
6. 我看时间限制是1s,这个复杂度应该满足要求了。后面想到更好的方法再更新。
11
2024-11-21 广告
2024-11-21 广告
VSIM软件模拟是上海允若信息科技有限公司提供的一项专业服务。我们利用VSIM软件,为客户提供高精度的模拟环境,帮助他们在虚拟空间中测试和验证各种复杂系统。无论是通信系统、网络系统还是其他工程系统,VSIM都能提供详尽的模拟结果,助力客户优...
点击进入详情页
本回答由11提供
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询