【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 }

//思想:打表,利用前一个的结果,只需判断当前数字即可,很快!

posted @ 2013-07-26 16:20  龙腾四海365  阅读(172)  评论(0编辑  收藏  举报