[题目传送门] http://acm.nbut.org/JudgeOnline/problem.php?id=1031
[题意]
从小到大排列只有 4 和 7存在的数,4 , 7 ,44 ,47 ........ 这样,然后给你一个数n,n保证只有4和7组成,问你这个数是第几个。
看了一下HSS用了杨辉三角和进制转化,不禁先跪一下 Orz 。
这题打表,弱弱的水过了,BFS的赶脚,我们做一个数组 a[] , a[0] = 4 , a[1] = 7;
然后 对每一个 a[i] 进行操作 将 a[i] * 10 + 4 , a[i] * 10 + 7 放到数组后面。
结果发现就是顺序呀~ 。 4 , 7 , 4 * 10 + 4 , 4 * 10 + 7 , 7 * 10 + 4 , 7 * 10 + 7 .........
最后因为是递增的,所以二分一下。
[代码]
1 #include <iostream> 2 #include <algorithm> 3 #include <vector> 4 5 using namespace std; 6 7 vector<long long> VV; 8 9 void init() 10 { 11 VV.clear(); 12 VV.push_back(4); VV.push_back(7); 13 for(int i = 0 ; i < VV.size() ; i++) 14 { 15 if(VV[i] > 1000000000) break; 16 else {VV.push_back(VV[i] * 10 + 4); VV.push_back(VV[i] * 10 + 7);} 17 } 18 return ; 19 } 20 21 int main() 22 { 23 init(); 24 int T; 25 while(cin >> T) for(int i = 0 ; i < T ; i++) 26 { 27 long long n; 28 cin >> n; 29 int rank = lower_bound(VV.begin() , VV.end() , n) - VV.begin(); 30 cout << rank + 1 << endl; 31 } 32 return 0; 33 }