【ACM】NYOJ_506_洗澡_20130725
洗澡
时间限制:1000 ms | 内存限制:65535 KB
难度:1
描述
Mostrp是个爱干净的好少年。 有一次去澡堂洗澡时发现 澡堂的澡柜编号中没有出现过数字‘4’。 Mostrp 感到很好奇。可能是因为在澡堂老板眼里。数字‘4’是十分不吉利的。
现在Mostrp知道澡柜的最大的编号N,你能帮他算出澡堂一共有多少澡柜吗?
输入
有多组数据,每行输入一个N。
( 1 <= N <= 50000 )
输出
输出澡柜的个数,输出占一行。
样例输入
3
5
样例输出
3
4
1 #include <stdio.h> 2 int main() 3 {int n; 4 while(scanf("%d",&n)!=EOF) 5 {int i,j,m; 6 m=n; 7 for(i=1;i<n;i++) 8 {j=i; 9 while(j>0) 10 {if(j%10==4) 11 {m--; 12 j=0;} 13 j/=10; 14 } 15 } 16 printf("%d\n",m); 17 } 18 return 0; 19 }
思想:对所有数字逐个判断,含有4的减掉,
1 #include <stdio.h> 2 #include <string.h> 3 int s[50010]; 4 int main() 5 { 6 int n; 7 int i,j,t; 8 memset(s,0,sizeof(s)); 9 s[0]=0; 10 for(i=1;i<=50000;i++) 11 { 12 j=i; 13 t=0; 14 while(j>0) 15 { 16 if(j%10==4) 17 { 18 t++; 19 j=0; 20 } 21 j/=10; 22 } 23 if(!t) 24 s[i]=s[i-1]+1; 25 else 26 s[i]=s[i-1]; 27 } 28 while(scanf("%d",&n)!=EOF) 29 { 30 printf("%d\n",s[n]); 31 } 32 return 0; 33 }
//思想:打表,利用前一个的结果,只需判断当前数字即可,很快!