zoukankan      html  css  js  c++  java
  • XC1263 签到题(哇 ,写得我怀疑人生啊!!!@!@)

    1263: 签到题

    时间限制: 1 Sec  内存限制: 128 MB
    提交: 174  解决: 17

    题目描述

    大家刚过完寒假,肯定还没有进入状态,特意出了一道签到题给各位dalao压压惊。

    如果一个数字其中每一位都互不相同,则这个数满足要求。(如:21、10满足要求,11 不满足要求)。

    给出一个范围[a,b],并求出在范围内符合要求数字的数量。

    输入

    第一行T表示组数,T<=1000.

    每一组输入一行,包含两个数字a,b。1<=a,b<=100000.

    输出

    对于每一组,求出[a,b]范围内符合条件数字的数量。

    样例输入

    1 1 11

    样例输出

    10
     
       题目意思很简单,就是拆分月一个数的各个位,然后,我就想当然的用了很蠢的方法,暴力拆解,然后就出现了:

     真的开始心态都崩了

     然后,去问了下林喵喵dalao 他跟我说用打表的方法,就是先全部遍历一遍100000个数,把每个数字之前对应的有几个符合标准的数字给记录下来,然后最后输出array[a]-array[b]即可。

     然后,对于判断一个数的各个位数是否一样,也有一个很好的子函数,是宇飞想出来的。

    奉上函数:

    int checkNum(int n) {
        char arr[] = "0123456789";//先搞一个字符串
        while (n != 0)
        {
            if (arr[n % 10] <= '9') //假如一个数在个位中 出现了 且是数字范围
            {
                arr[n % 10] = 'x';//我们把它设置为 x 这样它所对应的数就不在数的范围内了
            //下再有这个数  就直接到else 里面了
            } else {
                return 0;
            }
            n /= 10;//然后一步步 往百位千位走
        }
       //如果到最后都没有 return 0 那就是符合标准
        return 1;
    }

    然后是打表的部分:

     for(int i=1;i<=100000;i++)
        {
            if(checkNum(i))
            {
               cnt++;
            }
            array[i]=cnt;
        }

    再最后在主函数中,要考虑一个地方,就是在减的过程中,考虑下小数是否符合条件,符合我们还要+1,不符合,直接减。

    最后,完整ac代码:

    #include <iostream>
    #define length 100001
    using namespace std;
    int checkNum(int);
    
    int array[length] = {};
    
    int main() {
        int cnt=0;
        for(int i=1;i<=100000;i++)
        {
            if(checkNum(i))
            {
               cnt++;
            }
            array[i]=cnt;
        }
       // cout<<array[10]<<endl;
      int cishu;
       cin>>cishu;
       int m,n;
       int number;
       while(cishu--)
       {
           cin>>m>>n;
           if(checkNum(m))//要考虑小的那个数符不符合标准
           {
               cout<<array[n]-array[m]+1<<endl;//符合标准 我们还得加上小的数
           }
           else{
            cout<<array[n]-array[m]<<endl;//不符合标准我们直接退出
           }
    
    
       }
    
        return 0;
    }
    
    int checkNum(int n) {
        char arr[] = "0123456789";//先搞一个字符串
        while (n != 0)
        {
            if (arr[n % 10] <= '9') //假如一个数在个位中 出现了 且是数字范围
            {
                arr[n % 10] = 'x';//我们把它设置为 x 这样它所对应的数就不在数的范围内了
            //下次就直接到else 里面了
            } else {
                return 0;
            }
            n /= 10;//然后一步步 往百位千位走
        }
       //如果到最后都没有 return 0 那就是符合标准
        return 1;
    }
  • 相关阅读:
    Python import与from import使用及区别介绍
    python with as的用法
    python32模拟鼠标和键盘操作
    Python简易爬虫
    C# 控制台程序 托盘图标 事件响应
    C#和.Net的关系
    springboot集成schedule
    工作-感觉越来越难了
    MAC VCS 提交代码
    编程规范
  • 原文地址:https://www.cnblogs.com/William-xh/p/7137946.html
Copyright © 2011-2022 走看看