ZJNU 1244 - 森哥数——高级

打表找规律吧……

一定要记得每一步都得开long long

然后可以发现所有的森哥数每一位只可能是0,1,2,3

就可以想到最高O(3^9)的算法

枚举1e9之内的所有满足条件的数判断

枚举9位数,最后1e9整无法枚举到

特判一下

 1 /*
 2 Written By StelaYuri
 3 */
 4 #include<bits/stdc++.h>
 5 using namespace std;
 6 typedef long long L;
 7 L senge(L in){
 8     L out=0;
 9     while(in)
10         out+=in%10LL,in/=10LL;
11     return out;
12 }
13 int main(){
14     L t,m,l,r,a,b,c,d,e,f,g,h,i,s=0;
15     scanf("%lld%lld",&l,&r);
16     for(a=0;a<4;a++)
17         for(b=0;b<4;b++)
18             for(c=0;c<4;c++)
19                 for(d=0;d<4;d++)
20                     for(e=0;e<4;e++)
21                         for(f=0;f<4;f++)
22                             for(g=0;g<4;g++)
23                                 for(h=0;h<4;h++)
24                                     for(i=0;i<4;i++){
25                                         t=a*1e8+b*1e7+c*1e6+d*1e5+e*1e4+f*1e3+g*100+h*10+i;
26                                         if(t<l)
27                                             continue;
28                                         if(t>r){
29                                             printf("%lld",s);
30                                             return 0;
31                                         }
32                                         m=a+b+c+d+e+f+g+h+i;
33                                         if(senge(t*t)==m*m)
34                                             s++;
35                                     }
36     if(r==1e9)
37         s++;
38     printf("%lld",s);
39     
40     return 0;
41 }

猜你喜欢

转载自www.cnblogs.com/stelayuri/p/12234432.html
今日推荐