码迷,mamicode.com
首页 > 其他好文 > 详细

数的分解

时间:2020-01-25 18:13:19      阅读:60      评论:0      收藏:0      [点我收藏+]

标签:原因   fstream   als   for   简单   数字   排列   class   ace   

 1 #include<iostream>
 2 //#include<fstream>
 3 using namespace std;
 4 bool check(int n){
 5     while(n){
 6         if(n%10==2||n%10==4){
 7             return false;
 8         }
 9         n/=10; 
10     }
11     return true;
12 }
13 int main(){
14     int n,a;
15 //    fstream file("haha.txt");
16 //    file>>n;
17     cin>>n;
18     int sum;
19     while(n--){
20     //    file>>a;
21         cin>>a;
22         sum=0;
23         for(int i=1;i<=a;i++){
24             if(check(i)){
25                 for(int j=i+1;a-i-j>j;j++){
26                     if(check(j)&&check(a-i-j)){
27                         sum++;
28                     }
29                 }
30             }
31         }
32     }
33     cout<<sum<<endl;
34     return 0;
35 }

 

直接用暴力搜索法,直接搜可能会超时,要进行一些优化

第一个数设成i,第二个数设成i+1,第三个数设成a-i-j,这样设置的原因是:

  1.因为题目说不能重复,

  2.要排除掉重复的结果,比如,对9进行分解的话,答案只有一种,就是1,3,5,但如果用无脑的搜索的话,答案会是6种,就会变成1,3,5的全排列,但题目中要求去除掉重复的。

然后就是检验分解成的数是否符合条件,就是检验是否含有2和4,这很简单,假设要检验的数是你,就是n对10取模,这样能得到n这个数的个位上的数字,判断它是不是2或4,然后n=n/10,相当于舍弃掉了n个位上的数字,这样就能把n各个位上的数字都检验过来。

数的分解

标签:原因   fstream   als   for   简单   数字   排列   class   ace   

原文地址:https://www.cnblogs.com/fate-/p/12233220.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!