Problem Description
Recently, Mr Xie learn the concept of happy number. A happy number is a number contain all digit 7 or as 1 digit other than 7. For example, 777 are 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 is not happy number. Now Mr. Xie want to know for a given integer n, how many number among [1,n] is happy numbers, but counting them one by E is slow can I help him?
Input
First line an integer t indicate there is T testcases (1≤t≤100). Then T-lines follow, each line an integer n (1≤n≤106, n don ' t has leading zero).
Output
Output Case number First and then the answer.
Sample Input
517172030
Sample Output
Case 1:1case 2:7case 3:10case 4:10case 5:11
when the game saw this problem, see this sentence counting them one by one is slow, think that violence may time out, then did not go to that aspect to think about, and then did not have the topic to do, concentrate on this problem, with violence + dozen watch to try on. When the game is still to dare to try Ah, only to have ideas to achieve, even if the idea is wrong, we have to dare to try! There will be progress only if there is constant exploration;The
idea of this problem is to play the table, because the amount of data is not too large, playing table or can do out;
The following is the AC code;
#include "stdio.h" #include "string.h" const int maxn=1000000+10;int a[maxn];void init ()//Hit table enumeration {int i; for (i=0;i<=9;i++)///here today to do the card here, the value of I set to 1, and then check this error for a long time, the last look at the data a few, only to find here is wrong; {//There is a last 0 case not considered A[i]=1; A[i*10+7]=1; Two-bit case a[7*10+i]=1; a[i*100+7*10+7]=1;//three-bit a[7*100+i*10+7]=1; A[7*100+7*10+i]=1; a[i*1000+7*100+7*10+7]=1;//four-bit a[7*1000+i*100+7*10+7]=1; A[7*1000+7*100+i*10+7]=1; A[7*1000+7*100+7*10+i]=1; A[i*10000+7*1000+7*100+7*10+7]=1; A[7*10000+i*1000+7*100+7*10+7]=1; A[7*10000+7*1000+i*100+7*10+7]=1; A[7*10000+7*1000+7*100+i*10+7]=1; A[7*10000+7*1000+7*100+7*10+i]=1; A[i*100000+7*10000+7*1000+7*100+7*10+7]=1; A[7*100000+i*10000+7*1000+7*100+7*10+7]=1; A[7*100000+7*10000+i*1000+7*100+7*10+7]=1; A[7*100000+7*10000+7*1000+i*100+7*10+7]=1; A[7*100000+7*10000+7*1000+7*100+i*10+7]=1; a[7*100000+7*10000+7*1000+7*100+7*10+i]=1; }}int Main () {memset (a,0,sizeof (a)); Init (); int t,i,count,n,j; scanf ("%d", &t); for (i=1;i<=t;i++) {count=0; scanf ("%d", &n); for (j=1;j<=n;j++) {if (a[j]==1) count++; } printf ("Case%d:", i); printf ("%d\n", count); } return 0;}
Another way of writing, feel less memory than the above;
#include <iostream> #include <vector> #include <cstdio>using namespace Std;int main () {//Freopen (" A.txt "," R ", stdin); int T, n, I, J; int p[200] = {1,2,3,4,5,6,7,8,9,17,27,37,47,57,67,70,71,72, 73,74,75,76,77,78,79,87,97,177,277,377,477,57 7, 677,707,717,727,737,747,757,767,770,771,772,773, 774,775,776,777,778,779,787,797,877, 977,1777,2777, 3777,4777,5777,6777,7077,7177,7277,7377,7477,7577,7677, 7707,7717,7727,77 37,7747,7757,7767,7770,7771,7772,7773,7774, 7775,7776,7777,7778,7779,7787,7797,7877,7977,8777,9777,17777, 27777,37777,47777,57777,67777,70777,71777,72777,73777,74777,75777, 76777,77077,77177,77 277,77377,77477,77577,77677,77707,77717,77727, 77737,77747,77757,77767,77770,77771,77772,77773,77774,7777 5,77776, 77777,77778,77779,77787,77797,77877,77977,78777,79777,87777,97777, 177777,277777,377777,477777,577777,677777,707777,717777,727777,737777, 747777,757777,767777,770777,771777,7 72777,773777,774777,775777,776777, 777077,777177,777277,777377,777477,777577,777677,777707,777717,777727, 777737,777747,777757,777767,777770,777771,777772,777773,777774,777775, 777776,777777,77 7778,777779,777787,777797,777877,777977,778777,779777, 787777,797777,877777,977777}; CIN >> T; for (i = 1; I <= t; + + i) {cin >> n; for (j = 0; P[j] <= n && J < 189; + + j); printf ("Case%d:%d\n", i,j); } return 0;}
XTU OJ 1210 Happy Number (violence + playing table)