原题:     

某一密码仅使用KLMNO5个字母,密码中的单词从左向右排列,密码单词必须遵循如下规则:

    (1 密码单词的最小长度是两个字母,可以相同,也可以不同

    (2 K不可能是单词的第一个字母

    (3 如果L出现,则出现次数不止一次

    (4 M不能使最后一个也不能是倒数第二个字母

    (5 K出现,则N就一定出现

    (6 O如果是最后一个字母,则L一定出现

问题一:下列哪一个字母可以放在LO中的O后面,形成一个3个字母的密码单词?

A) K   B)L   C) M    D) N

问题二:如果能得到的字母是KLM,那么能够形成的两个字母长的密码单词的总数是多少?

A)1 B)3 C)6 D9

问题三:下列哪一个是单词密码?

A) KLLN   B) LOML   C) MLLO   D)NMKO

问题四:3个相同的字母可以构成的不同密码单词的总数是多少?

A) 1   B)2   C) 3   D) 4

问题五:单词密码MMLLOKN可以通过下列变成另一个密码单词,除了:

A) N代替每个L    B)O代替每一个M    C)O代替    D)O移到N的左边

 

从题干与问题我们不难得出一个结论: 求解某个字符串(遵循规则下的字符串)是否属于密码单词. 对于每个问题,我们都可以得出需要判断的字符串.

 

思路: 首先我们先写一个遵循以上规则的字符串的判断函数. 然后再根据每个问题判断出对应的字符串,最后得出每个问题的结论.

 1  private static bool CheckStr(string str)
 2         {
 3             char[] ar = str.ToCharArray();
 4             //密码单词的最小长度是两个字母,可以相同,也可以不同
 5             if (ar.Length < 2)
 6             {
 7                 return false;
 8             }
 9             //K不可能是单词的第一个字母
10             if (ar[0== 'K')
11             {
12                 return false;
13             }
14             //如果L出现,则出现次数不止一次
15             if (str.Contains("L"))
16             {                
17                 int Count = 0;
18                 for (int i = 0; i < ar.Length; i++)
19                 {
20                     if (ar[i] == 'L')
21                     {
22                         Count++;
23                     }
24                 }
25                 if (Count < 2)
26                 {
27                     return false;
28                 }
29             }
30             //M不能使最后一个也不能是倒数第二个字母
31             if (ar[ar.Length - 1== 'M' || ar[ar.Length - 2== 'M')
32             {
33                 return false;
34             }
35             //K出现,则N就一定出现
36             if (str.Contains("K"))
37             {
38                 if (!str.Contains("L"))
39                 {
40                     return false
41                 }
42             }
43             //O如果是最后一个字母,则L一定出现
44             if (ar[ar.Length - 1== 'O')
45             {
46                 if (!str.Contains("L"))
47                 {
48                     return false;
49                 }
50             }
51             return true;
52         }


针对问题一,我们可以得出需要判断的字符串 LOK,LOL,LOM,LON

 1 static void Main(string[] args)
 2         {
 3             string[] Str = { "LOK""LOL""LOM""LON" };
 4 
 5             forint i  = 0 ; i<  Str.Length ; i++)
 6             {
 7                 if (CheckStr(Str[i]))
 8                 {
 9                     Console.WriteLine(Str[i] + " OK");
10                 }
11                 else
12                 {
13                     Console.WriteLine(Str[i] + " Error"); 
14                 }
15             }
16         }


第二个问题需要判断的字符串:  KK,LL,MM,KL,LK,KM,MK,LM,ML

第三个问题需要判断的字符串:  KLLN,LOML,MLLO,NMKO

第四个问题需要判断的字符串:  KKK,LLL,MMM,OOO,NNN

第五个问题需要判断的字符串:  MMNNOKN,OOLLOKN,OOOOOOO,MMLLNOK


以下问题都类似于第一个问题处理.

 

 

 


posted on 2010-09-29 09:32  为了看阳光  阅读(1472)  评论(0编辑  收藏  举报