• 带通配符的数


     

    给定一个带通配符问号的数W,问号可以代表任意一个一位数字。

    再给定一个整数X,和W具有同样的长度。

    问有多少个整数符合W的形式并且比X大?

    输入格式

    多组数据,每组数据两行,第一行是W,第二行是X,它们长度相同。在[1..10]之间.

    输出格式

    每行一个整数表示结果。

     

    答题说明

    输入样例

    36?1?8

    236428

    8?3

    910

    ?

    5

    输出样例

    100

    0

    4

     

    思路:

    从左往右依次判断各个数字,分别判断数字的情况和通配符的情况。通配符的情况可转换为更小规模的子问题。

    此题重点考察分类讨论的能力,可以拿笔出来写下各种情况的分解。

     

    #include<cstdio>
    #include<cstring>
    #include<iostream>
    #include<string>
    #include<algorithm>
    #include<cmath>
    using namespace std;
    
    const int N=101;
    char a[N];
    char b[N];
    
    //return greater 
    int findge(char* a, char *b)
    {
            int r=0;
            int count=0;
            int len=strlen(a);
            for(int i=0;i<len;i++)
            {
                    if(a[i]=='?')
                            count++;
            }
    
            for(int i=0;i<len;i++)
            {
                    //?情况下
                    if(a[i]=='?')
                    {
                            //计算大于的情况,等于情况相当于当前问题的子问题(即计算后面数字大于的情况,在后续的循环中继续计算)
                            count--;
                            r += ('9'-b[i])*pow(10, count);
                    }
                    else//数字情况下 
                    {
                            //大于,剩下的数字都可以随便取
                            if(a[i]>b[i])
                            {
                                    return r+pow(10, count);
                            }
                            //小于,后面取什么都不行
                            else if(a[i]<b[i])
                            {
                                    return r;
                            }
                            //等于,继续比较后面的数字
                            else if(a[i]==b[i])
                            {
                                    continue;
                            }
                    }
            }
            return r;
    }
    
    int main()
    {
            freopen("./num.in", "r", stdin);
            while(scanf("%s %s", a, b)==2)
            {
                    printf("%d
    ", findge(a, b));
            }
    
        return 0;
    }
  • 相关阅读:
    POJ 2486
    奇怪的电梯
    穿越泥地(mud)
    救援行动(save)
    As Fast As Possible
    Connecting Universities
    They Are Everywhere
    Cells Not Under Attack
    吃饭
    花店橱窗(flower)
  • 原文地址:https://www.cnblogs.com/cute/p/3628221.html
Copyright © 2020-2023  润新知