Happy Number | ||
Accepted : 156 | Submit : 371 | |
Time Limit : 1000 MS | Memory Limit : 65536 KB |
Problem Description
Recently, Mr. Xie learn the concept of happy number. A happy number is a number contain all digit 7 or only 1 digit other than 7. For example, 777 is a happy number because 777 contail all digit 7, 7177 and 87777 both happy number because only 1 digit other than 7. Whereas 887,799 9807,12345, all of them are not happy number. Now Mr. xie want to know for a given integer n, how many number among [1,n] are happy numbers, but counting them one by one is slow, can you help him?
Input
First line an integer t indicate there are t testcases(1≤t≤100). Then t lines follow, each line an integer n(1≤n≤106, n don't have leading zero).
Output
Output case number first, then the answer.
Sample Input
5 1 7 17 20 30
Sample Output
Case 1: 1 Case 2: 7 Case 3: 10 Case 4: 10 Case 5: 11
Source
daizhenyang
解析:直接打表即可。查找时用二分查找。
AC代码:
#include <bits/stdc++.h>
using namespace std;
vector<int> p;
void init(){
for(int i=1; i<1000000; i++){
int ans = 0, j = i;
while(j){
if(j % 10 != 7) ans ++;
j /= 10;
}
if(ans <= 1) p.push_back(i);
}
}
int main(){
#ifdef sxk
freopen("in.txt", "r", stdin);
#endif // sxk
init();
int t, n;
scanf("%d", &t);
for(int i=1; i<=t; i++){
scanf("%d", &n);
printf("Case %d: %d\n", i, upper_bound(p.begin(), p.end(), n) - p.begin()); //二分查找
}
return 0;
}