14 条题解
-
0
B1题解
题目:
将1,2,…,9共9个数分成三组,分别组成三个三位数; 且使这三个三位数构成1:2:3的比例; 试求出所有满足条件的三个三位数。 例如:三个三位数: 192、384、576 满足以上条件。
相信大家跟我一样,读完题先是一愣当然,由于我是看到了1:2:3的比例; 所以先想到的就是用for循环
#include<bits/stdc++.h> using namespace std; int main(){ for(int i=100;i<=999;i++){ /* 这里呢,就是判断一下,是否可以构成1:2:3 So,只需要这样输出: */ cout<<i<<" "<<i*2<<" "<<i*3<<endl; } return 0; }
然后遇到了问题~~
哈哈,直接不对!!!emm..那就再看看,因为for循环中要用到i*3,所以 我们可以直接让i<=333,但只要仔细一读题,你会发现 题目中的第二的条件:
用1-9这9个数!!
有种被骗了的感觉ok,所以我们还要排除0 这是个
伟大的难点 所以我们可以这样做:-
让for循环的i 初始值为 111
纯粹较少时间,不改也行,好像没有大问题 -
也可以将i和i * 2,i * 3这几个数的每一位判断是不是0
因为给了是个三位数所以
- 百位:i/100
- 十位:i/10%10
- 个位:i%10
所以得到以下代码:
#include<bits/stdc++.h> using namespace std; int main(){ int one,two,three; for(int i=111;i<=333;i++){ one=i; two=i*2; three=i*3; if((one/100)!=0 && (one/10%10)!=0 && (one%10)!=0){ if((two/100)!=0 && (two/10%10)!=0 && (two%10)!=0){ if((three/100)!=0 && (three/10%10)!=0 && (three%10)!=0){ cout<<one<<" "<<two<<" "<<three<<endl; } } } } return 0; }
感觉良好,但是
过不了,哈哈emmmm.... 所以我们再次读题,发现是每个数只能用一次
这就好做了,只要判断每个数位乘起来是不是9!
和加起来是不是45(从1+到9)
所以得到以下代码:
#include<bits/stdc++.h> using namespace std; int main(){ int one,two,three; for(int i=111;i<=333;i++){ one=i; two=i*2; three=i*3; if((one/100)!=0 && (one/10%10)!=0 && (one%10)!=0){ if((two/100)!=0 && (two/10%10)!=0 && (two%10)!=0){ if((three/100)!=0 && (three/10%10)!=0 && (three%10)!=0){ if((one/100) * (one/10%10) * (one%10) * (two/100) * (two/10%10) * (two%10) * (three/100) * (three/10%10) * (three%10) == 1*2*3*4*5*6*7*8*9){ if((one/100) + (one/10%10) + (one%10) + (two/100) + (two/10%10) + (two%10) + (three/100) + (three/10%10) + (three%10) == 45){ cout<<one<<" "<<two<<" "<<three<<endl; } } } } } } return 0; }
你以为结束了??不可能!!!绝对不可能!!!这样虽然能过,可是大家有没有想过一个问题:
既然我们都已判断了三个数每个数的数位相加和相乘 那还有没有必要判断0呢???
对,没有必要
1.相乘,如有0,就是0 2.相加如果有,那么就会小于45吧!! 所以
删了吧!!最后的代码如下
Code
#include <bits/stdc++.h> using namespace std; int main(){ int one, two, three; for (int i = 111; i <= 333; i++){ one = i; two = i * 2; three = i * 3; if ((one / 100) * (one / 10 % 10) * (one % 10) * (two / 100) * (two / 10 % 10) * (two % 10) * (three / 100) * (three / 10 % 10) * (three % 10) == 1 * 2 * 3 * 4 * 5 * 6 * 7 * 8 * 9){ if ((one / 100) + (one / 10 % 10) + (one % 10) + (two / 100) + (two / 10 % 10) + (two % 10) + (three / 100) + (three / 10 % 10) + (three % 10) == 45){ cout << one << " " << two << " " << three << endl; } } } return 0; }
最后完结撒花,开心
热知识
这个题目,有点... emmmmm.. -
信息
- ID
- 32
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 3
- 标签
- 递交数
- 329
- 已通过
- 176
- 上传者