HDU-2089-不要62

简介: HDU-2089-不要62
#include<stdio.h>
#define maxn 1000010
int f[maxn];
int weishu(int a)
{
  int b=1;
  while(1)
  {
    if(a/10 == 0) 
      break;
    else
    {
      a/=10;
      b++;
    }
  }
  return b;
} //此函数用于输出参数是几位 记录位数是为了下面方便标记不吉利的数
int fun(int x,int n)   //此处n是位数  x是要判断的数
{
  int flag=0;
  for(; n>0; n--)
  {
     if(x%10==4||x%100==62)
     {
        flag=1;
        break;
     }
     else
     x/=10;
    }
    return flag;
} //此函数用于将所有含有4或者62 的数字标记为 1
int main()
{
  int n,m,i,j,wei;
  for(i=4; i<maxn; i++)
  {
    wei=weishu(i);
    f[i]=fun(i,wei);
  }
  // 记录范围内不要的数 这里是打表用数组储存不要的数 避免数据过多超时
  while(~scanf("%d %d",&n,&m)&&n||m)
  {
    int ans=0;
    for(j=n; j<=m; j++)
       if(f[j])
         ans++;
    printf("%d\n",m-n-ans+1);
  } 
  return 0;
}

题目总结:

1、多数据重复处理问题 要记得使用自定义函数方便处理数据

2、学习用数据记录储存数据

3、此题考虑位数是关键

目录
相关文章
|
算法 Java
HDU 2084 数塔
在讲述DP算法的时候,一个经典的例子就是数塔问题,它是这样描述的: 有如下所示的数塔,要求从顶层走到底层,若每一步只能走到相邻的结点,则经过的结点的数字之和最大是多少?
178 0
|
C++
HDU1862
中文题,题意挺好理解,不过多赘述。
1275 0
|
机器学习/深度学习
|
机器学习/深度学习 人工智能