庞果网上的一道关于带通配符的数的问题,问题的大意如下:
给定一个带通配符问号的数W,问号可以代表任意一个一位数字。
再给定一个整数X,和W具有同样的长度。
问有多少个整数符合W的形式并且比X大?
输入格式
多组数据,每组数据两行,第一行是W,第二行是X,它们长度相同。在[1..10]之间.
输出格式
每行一个整数表示结果。
答题说明:
输入样例
36?1?8
236428
8?3
910
?
5
输出样例
100
0
4
用回溯法可解此题。
#include <iostream>
#include<string>
using namespace std;
int coun=0;
int check(string s1,string s2)
{
if(s1>s2) return 1;
else return 0;
}
void countn(string s1,string s2,int k)
{
int len=s1.length();
int i;
if('?'==s1[k])
for(i=0;i<=9;i++)
{
s1[k]=i+'0';
if(check(s1,s2))
{
if(k==len-1) coun+=1;
else countn(s1,s2,k+1);
}
}
else
{
if(check(s1,s2))
{
if(len-1==k)
coun+=1;
else
countn(s1,s2,k+1);
}
else
coun=0;
}
// return coun;
}
int main()
{
string s1,s2;
cin>>s1>>s2;
countn(s1,s2,0);
cout<<coun<<endl;
return 0;
}