(C#)ACM考试题的第二题

这个有点难啊。暂时这么做了做,不符合第二条要求。BBC的话。会有重复的。
BBC
BCB
BCB
CBB
虽然筛选不重复的肯定可以实现,不过这肯定不是题目原意。有时间需要重新做一下

using  System;
using  System.Collections.Generic;
using  System.Text;
using  System.IO;

namespace  ACM2
{
    
class Program
    
{
        
static void Main(string[] args)
        
{
            FileStream fs 
= new FileStream(args[0], FileMode.Open, FileAccess.Read);
            StreamReader sr 
= new StreamReader(fs);
            
string s=sr.ReadLine();
            
int n = int.Parse(s);
            
for (int i = 0; i < n; i++)
            
{
                s 
= sr.ReadLine();
                Console.WriteLine(
"Case " + (i + 1));
                Deal(s);
                
            }

        }

        
static string Sort(string str)
        
{
            
char[] cs = str.ToCharArray(); char temp;
            
for(int i=0;i<cs.Length;i++)
                
for(int j=i;j<cs.Length;j++)
                    
if (cs[i] > cs[j])
                    
{
                        temp 
= cs[i];
                        cs[i] 
= cs[j];
                        cs[j] 
= temp;
                    }

            
return new string(cs);
        }

        
static void Deal(string str)
        
{
            
string mstr = Sort(str);
            
string[] strs = DealF(mstr);
            
for (int i = 0; i < strs.Length; i++)
                Console.WriteLine(strs[i]);
        }

        
static string[] DealF(string str)
        
{
            
if (str.Length == 1)
                
return new string[] { str };
            
if (str.Length == 2)
            
{
                
string[] toRets = new string[2];
                toRets[
0= str;
                toRets[
1= str.Substring(1)+str.Substring(0,1);
                
return toRets;
            }

            
string c=str.Substring(0,1);
            
string[] Ret = DealF(str.Substring(1));
            
string[] toRet = new string[Ret.Length *2];
            
for (int i = 0; i < toRet.Length; i++)
            
{
                
if (i < toRet.Length / 2)
                    toRet[i] 
= c + Ret[i];
                
else
                    toRet[i] 
= Ret[i - Ret.Length] + c;
            }

            
return toRet;
        }

    }

}

你可能感兴趣的:(ACM)