问题 C: 找回密码

问题 C: 找回密码

题目描述

小明忘记了他的密码,现在向你寻求帮助,希望你能帮他找回密码。他告诉你他的密码是由4个数字(0到9)组成的。他能记得0到9中哪些数字出现过哪些没出现过,也有记不得出没出现过的数字。
现在给你一个长度为10的字符串s(s0,s1,s2,,,,,s9)
如果si为o那么他记得数字i出现过(可能不止出现过一次)。
如果si为x那么他记得数字i没出现过
如果si为?那么他不记得数字i是否出现过
现在要你输出有多少种密码可能是小明的密码

 

输入

字符串s
s是一个长度为10的字符串,由o,x,?组成。

输出

有多少种可能的密码

样例输入
ooo???xxxx
样例输出
108
提示

另外一组样例
输入
o?oo?oxoxo
输出
0

#include <bits/stdc++.h>
using namespace std;

int fun(string s,int count,string sb) {
	int suoyou=0;
	if(count==4) {
		for(int i=0; i<sb.length(); i++) {
			if(s[int(sb[i]-'0')]=='x') {
				return 0;
			}
		}
		for(int i=0; i<s.length(); i++) {
			if(s[i]=='o') {
				int maxcount=0;
				for(int j=0; j<sb.length(); j++) {
					if(sb[j]=='0'+i)
						maxcount++;
				}
				if(maxcount==0)
					return 0;
			}
		}
		return 1;
	}
	for(int i=0; i<s.length(); i++) {
		sb[count]='0'+i;
		suoyou+=fun(s,count+1,sb);
	}


	return suoyou;
}


int main() {
	string s;
	cin>>s;
	cout<<fun(s,0,"0000");
	return 0;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值