2025年排列,1到9组成三个三位数,使三个数比值为1-2-3(C++)

排列,1到9组成三个三位数,使三个数比值为1-2-3(C++)题目要求 用 1 2 3 9 组成 3 个三位数 abc def ghi 每个数字恰好使用一次 要求 abc def ghi 1 2 3 按照 abc def ghi 的格式输出所有解 思路 这道题不难 关键在于怎么判断是否每个数字使用一次 由于自己没想出好的办法

大家好,我是讯享网,很高兴认识大家。

题目要求:

用1,2,3,...,9组成3个三位数abc,def,ghi,每个数字恰好使用一次,要求abc:def:ghi=1:2:3。按照“abc def ghi”的格式输出所有解。


思路:

这道题不难,关键在于怎么判断是否每个数字使用一次。由于自己没想出好的办法,看到别人好的思路就想mark下来。

1. 要求1~9这9个数字都使用且只能使用一次,所以想到用循环,对每3个三位数组成进行判断

2. 循环初始可以从123开始,是最小的且数字不重复的三位数。3个三位数中最小的那一个,最大最大可以循环到333,333*3=999

3. 关于怎么判断是否每个数字使用一次是最关键的一步。比较蠢的方法是取出9个数字分别来比较一下,但是想想这得写多少句判断语句啊,于是放弃了。。从网上看到别人好的思路是!用数组!定义一个长度为10的数组,把0~9出现的次数记录下来,然后只需要判断是否次数为1即可,之前把每一个数字都相互比较一下的想法就显得非常愚蠢了。


讯享网

4. 这个是刚开始的想法,没有下面的代码那么好:数组中记录的是数字出现的次数,也就是每出现一次就+1,如s[i/100]+=1; 然后后面就要判断数组中1~9每个元素的数字是否都是1。而这种写法用for循环判断也显得累赘。

5. 这个是下面代码的比较好的想法,数组中记录的是这个数字是否有出现,也就是无论出现一次两次三次数组元素的值都是1,没有出现则是0。在最后判断的地方,只需要把数组1~9元素的值相加,如果相加结果是9则说明每个数字都只出现一次,毕竟如果有一个数字出现两次的话相加不可能为9的。难题解决了,下面就可以输出啦啦啦啦啦


#include<iostream> using namespace std; int main(){ int s[10];//定义一个数组记录0~9出现的次数 for(int i=123;i<333;i++){ for(int m=0;m<10;m++) s[m]=0; s[i/100]=1; s[i/10%10]=1; s[i%10]=1; int j=i*2; s[j/100]=1; s[j/10%10]=1; s[j%10]=1; int k=i*3; s[k/100]=1; s[k/10%10]=1; s[k%10]=1; int sum=0; for(int m=1;m<10;m++) sum+=s[m]; //将1~9每个数字出现次数加起来,如果等于9则每个数字都出现了一次 if(sum==9) cout<<i<<" "<<j<<" "<<k<<endl; } return 0; } 

讯享网

运行结果:

192 384 576
219 438 657
273 546 819
327 654 981

小讯
上一篇 2025-01-25 08:57
下一篇 2025-01-24 17:52

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/128853.html