首页 > 技术文章 > 2、黑化的牛牛--全国模拟(四)

qqky 2017-06-17 10:47 原文

[编程题] 黑化的牛牛
时间限制:1秒
空间限制:32768K
牛牛变得黑化了,想要摧毁掉地球。但他忘记了开启地球毁灭器的密码。牛牛手里有一个字符串S,牛牛还记得从S中去掉一个字符就恰好是正确的密码,请你帮牛牛求出他最多需要尝试多少次密码。
如样例所示S = "ABA",3个可能的密码是"BA", "AA", "AB".
当S = "A", 牛牛唯一可以尝试的密码是一个空的密码,所以输出1. 
输入描述:
输入包括一个字符串S,字符串长度length(1 ≤ length ≤ 50),其中都是从'A'到'Z'的大写字母。
 
 
输出描述:
输出一个整数,表示牛牛最多需要尝试的密码次数。
 
输入例子:
ABA
 
输出例子:
3
 
解题思路:本题使用set来存储,可以自动过滤相同的字符串,然后针对字符串,求出其删掉第0位-第n-1位的全部结果,存入set中,set的大小即为结果数,其中length==1的情况特殊处理。
 1 #include <iostream>
 2 #include <set>
 3  
 4 using namespace std;
 5 //去掉字符串的第i位字符
 6 string fun(string str,int n)
 7 {
 8     int length = str.size();
 9     string tmp;
10     tmp = str;
11     for(int i=n;i<length-1;i++)
12     {
13         tmp[i] = tmp[i+1];
14     }
15  
16     tmp[length-1] = '\0';
17  
18     return tmp;
19 }
20 int main()
21 {
22     string s;
23     while(cin>>s)
24     {
25         set<string> res;
26         int count = 0;
27         int length = s.size();
28         if(length == 1)
29         {
30             cout<<1<<endl;
31         }
32         else
33         {
34             for(int i=0;i<length;i++)
35             {
36                 string temp;
37                 temp = fun(s,i);
38                 res.insert(temp);
39             }
40             count = res.size();
41             cout<<count<<endl;
42         }
43     }
44     return 0;
45 }


 

推荐阅读