zoukankan      html  css  js  c++  java
  • 带通配符的数

     

    给定一个带通配符问号的数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;
    }
  • 相关阅读:
    2021NUAA暑假集训 Day3 题解
    2021NUAA暑假集训 Day2 题解
    2021NUAA暑期模拟赛部分题解
    CodeForces 1038D Slime
    UVA 11149 Power of Matrix
    UVA 10655 Contemplation! Algebra
    UVA 10689 Yet another Number Sequence
    HDU 4549 M斐波那契数列
    HDU 4990 Reading comprehension
    CodeForces 450B Jzzhu and Sequences
  • 原文地址:https://www.cnblogs.com/cute/p/3628221.html
Copyright © 2011-2022 走看看