洗澡
时间限制:
1000 ms | 内存限制:
65535 KB
难度:
1
-
描述
-
Mostrp是个爱干净的好少年。 有一次去澡堂洗澡时发现 澡堂的澡柜编号中没有出现过数字‘4’。 Mostrp 感到很好奇。可能是因为在澡堂老板眼里。数字‘4’是十分不吉利的。
现在Mostrp知道澡柜的最大的编号N,你能帮他算出澡堂一共有多少澡柜吗?
-
输入
-
有多组数据,每行输入一个N。
( 1 <= N <= 50000 )
输出
- 输出澡柜的个数,输出占一行。 样例输入
-
3 5
样例输出
-
3 4
简单题,还是用打表法,但因为变量没处理好,虐成狗。
代码如下:
#include<stdio.h> #define max 50010 int a[max]={0}; void count() { int i; for(i=1;i<max;i++) { int t=0; int n=i;//此处一定要赋值到n上,i的值不能有变化 while(n) { if(n%10==4) { t=1; break; } n=n/10; } if(t==1) a[i]=a[i-1]; else a[i]=a[i-1]+1; } } int main() { count(); int n; while(scanf("%d",&n)!=EOF) printf("%d\n",a[n]); return 0; }
函数的调用与把函数部分直接写在main函数中对程序的运行速度没影响,用调用函数的方法解题更直观
代码如下:
#include<stdio.h> #define max 50010 int a[max]; int cmp(int n) { while(n) { if(n%10==4) return 1; n=n/10; } return 0; } int main() { int n; for(int i=1;i<=50000;i++) { if(cmp(i)) a[i]=a[i-1]; else a[i]=a[i-1]+1; } while(scanf("%d",&n)!=EOF) printf("%d\n",a[n]); return 0; }
-
有多组数据,每行输入一个N。