C#练习题答案: 在恺撒密码第二变【难度:3级】--景越C#经典编程题库,1000道C#基础练习题等你来挑战

这篇博客提供了10道不同解答的C#编程题目,涉及恺撒密码的进阶问题,适合C#初学者及进阶者提升技能。
摘要由CSDN通过智能技术生成

在恺撒密码第二变【难度:3级】:

答案1:

using System.Text.RegularExpressions;
using System.Collections.Generic;
using System.Linq;
using System;
public class CaesarTwo
        {
         
            public static List<string> encodeStr(string s, int shift)
            {
   
               s=char.ToLower(s[0])+""+(char)((char.ToLower(s[0])-97+shift)%26+97)+string.Join("",s.Select((x,i)=>(char.IsUpper(s,i)) ? (char)((x+shift-65)%26+65) : (char.IsLower(s,i)) ? (char)((x+shift-97)%26+97) : x));
               var rs=new List<string>();
               foreach(Match m in Regex.Matches(s,".{0,"+(s.Length/5+(s.Length%5==0 ? 0 : 1))+"}")) if (rs.Count<5&amp;m.Value!="") rs.Add(m.Value);
               return rs;
            }
      
            public static string decode(List<string> s)
            {
   
                string u=string.Join("",s).Substring(2);
                return string.Join("",u.Select((x,i)=>(char.IsUpper(u,i)) ? (char)((x-s[0][1]+s[0][0]-65)%26+65) : (char.IsLower(u,i)) ? (char)((x-s[0][1]+s[0][0]-97)%26+97) : x));
            }
        }

答案2:

using System;
using System.Collections.Generic;
using System.Linq;

public class CaesarTwo
{
         
  private static string alphabet = "abcdefghijklmnopqrstuvwxyz";
  public static List<string> encodeStr(string s, int shift)
  {
       
    var firstLetter = char.ToLower(s[0]);
    var message = firstLetter + "" + (char)((int)firstLetter + shift) + string.Concat(s.Select(c => 
    {
    
      if(char.IsLetter(c))
      {
    
        var preShift = alphabet.IndexOf(char.ToLower(c)) + shift;
        while(preShift < 0)
        {
   
          preShift += alphabet.Length;
        }
        
        preShift %= alphabet.Length;
        
        preShift -= alphabet.IndexOf(char.ToLower(c));
        
        return (char)(((int)c) + preShift);     
      }
      else
      {
   
        return c;
      }
    }));

    var chunkMod = message.Length % 5;
    var chunkSize = message.Length / 5;
    var lastChunkSize = chunkSize;
    
    if(message.Length % 5 != 0)
    {
   
      chunkSize++;
      lastChunkSize = message.Length - (4 * chunkSize);
    }

    var list = new List<string>();
    
    var start = 0;
    for(var i=0;i<5;i++)
    {
   
      var len = chunkSize;
      
      if(i == 4)
      {
   
        len = lastChunkSize;
      }
      
      if(len > 0)
      {
   
        list.Add(message.Substring(start, len));
      }
      
      start += len;
    }    
    
    return list;
  }
      
  public static string decode(List<string> s)
  {
   
    var message = string.Concat(s);
    var unshift = message[1] - message[0];
    var decoded = "";
    for(var i=2;i<message.Length;i++)
    {
   
      if(char.IsLetter(message[i]))
      {
   
        var preShift = alphabet.IndexOf(char.ToLower(message[i])) - unshift;
        while(preShift < 0)
        {
   
          preShift += alphabet.Length;
        }
        
        preShift %= alphabet.Length;
        
        preShift -= alphabet.IndexOf(char.ToLower(message[i]));        
      
        decoded += (char)(((int)message[i]) + preShift);                  
      }
      else
      {
   
        decoded += message[i];
      }
    }
    return decoded;
  }
}

答案3:

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

public class CaesarTwo
        {
   
            private static List<string> splitEqually(string text, int nb)
            {
   
                List<string> res = new List<string>();
                int size = text.Length / nb;
                int rem = text.Length % nb;
                if (rem != 0)
                    size++;
                for (int start = 0, k = 0; k < nb; k++, start += size)
                {
   
                    int l = Math.Min(text.Length - k * size, size);
                    string s = text.Substring(start, l);
                    if (s != "") res.Add(s);
                }
                return res;
            }

            private static List<string> encodeAux(string s, int shift)
            {
   
                StringBuilder result = new StringBuilder();
                char c = Char.ToLower(s[0]);
                char ch = (char)('a' + (c - 'a' + shift) % 26);
                result.Append(c);
                result.Append(ch);
                for (int k = 0; k < s.Length; k++)
                {
   
                    ch = s[k];
                    if (ch >= 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值