C#练习题答案: 烧烤吧!【难度:2级】--景越C#经典编程题库,1000道C#基础练习题等你来挑战

烧烤吧!【难度:2级】:

答案1:

using System.Linq;
using System;
public class Kata {
  public static string Grille(string message,  int code) {
       string mapper = (mapper = new string('0', message.Length) + Convert.ToString(code, 2)).Substring(mapper.Length- message.Length);
       return string.Concat(message.Where((e,i)=> mapper[i] == '1'));
  }
}

答案2:

using System;
using System.Collections.Generic;
public class Kata {
  public static string Grille(string message, int code) {
      string bin = Convert.ToString(code, 2);
      int m = message.Length;
      int b = m==0 ? 0 : bin.Length;
      if(m!=0 && b==0) m=0;
      char[] complete_bin = (m>b) ? new char[m] : new char[b];
      char[] complete_message = (m>b) ? new char[m] : new char[b];
      List<char> lst = new List<char>();
      if(m>=b){
        //START
        Array.Copy(message.ToCharArray(),complete_message,m);
        for(int i=0, j=0;i<m;i++){
          complete_bin[i] = (i<(m-b)) ? '0' : bin[j];
          j = (i<(m-b)) ? 0 : j+1;
        }
      }
      else{
        //START
        Array.Copy(bin.ToCharArray(),complete_bin,b);
        for(int i=0, j=0;i<b;i++){
          complete_message[i] = (i<(b-m)) ? ' ' : message[j];
          j = (i<(b-m)) ? 0 : j+1;
        }
      }
      //CHECK
      int count = 0;
      foreach(char cb in complete_bin){
        if(cb == '1')
          lst.Add(complete_message[count]);
        count++;
      }
      List<char> final = new List<char>();
      count = 0;
      foreach(char l in lst){
        if(l!=' ')
          final.Add(lst[count]);
        count++;
      }
      return new string(final.ToArray());
  }
}

答案3:

using System;
using System.Linq;
public class Kata {
  public static string Grille(string m, int code) =>
     String.Concat(m.Where((c,i) => ((long)1 << m.Length - i - 1 &amp; code) != 0));
}

答案4:

using System;
using System.Text;

public class Kata {
  public static string Grille(string message, int code) {
      string ret =  String.Empty;
      int compareCode = 1;
      for(int i = message.Length-1; i>=0; i--)
      {
        if((compareCode&amp;code)>0) 
          ret =message[i].ToString() + ret;

        compareCode<<=1;
      }
      return ret;
  }
}

答案5:

using System;

public class Kata {
  public static string Grille(string message, int code) {
  
    if (code == 0)
      return string.Empty;

    const int max_len = sizeof(int) * 8;
    const int mask = (1 << (max_len -1));

    int len = message.Length > max_len ? max_len : message.Length;
    int msgOffset = len < max_len ? 0 : message.Length - max_len;
    char[] chars = new char[len];
    int i = 0;
    int n = 0;
    
    code <<= max_len - len;
        
    while(code != 0 &amp;&amp; i < len)
    {
      if(Convert.ToBoolean(code &amp; mask))
      {
        chars[n] = message[msgOffset + i];
        n++;
      }
      i++;
      code <<= 1;
    }
    return new string(chars.AsSpan(0, n));
  }
}

答案6:

using System;

class Kata
{
        public static string Grille(string message, int code)
        {
            const int max_len = sizeof(int) * 8;

            if (code == 0)
                return string.Empty;

            if(message.Length > max_len)
                message = message.Substring(message.Length - max_len);

            var len = message.Length;
            var chars = new char[len];
            var n = 0;

            for (int i = 0; i < len; i++)
            {
                if (Convert.ToBoolean((code >> (len - 1 - i)) &amp; 1))
                {
                    chars[n] = message[i];
                    n++;
                }
            }
            return new string(chars.AsSpan(0, n));
        }
}

答案7:

using System;
using System.Linq;

public class Kata
{
    public static string Grille(string message, int code)
    {
        var binary = Convert.ToString(code, 2).PadLeft(message.Length, '0').Reverse().Take(message.Length).Reverse();
        return string.Concat(message.Zip(binary, (m, b) => m * (b - '0')).Where(i => i > 0).Select(i => (char)i));
    }
}

答案8:

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

public class Kata {
  public static string Grille(string message, int code) {
      if(code == 0)
        return "0";
      int ln = message.Length;
      long c =(long)code;
      char[] arr = message.ToCharArray();
      List<char> chs = new List<char>();
      int i = 0;
      while(c > 0 &amp;&amp; i < ln){
        if((c &amp; 1) == 1)
          chs.Add(message[ln-1-i]);
        c >>= 1;
        i++;
      }
      chs.Reverse();
      return new string(chs.ToArray());
  }
}

答案9:

using System;
using System.Text;

public class Kata {
  public static string Grille(string message, int code) {
      Console.WriteLine(message);
      Console.WriteLine(code);
  
      StringBuilder sb = new StringBuilder();
  
      string binary = Convert.ToString(code, 2);
      
      if (binary.Length < message.Length)
        binary = binary.PadLeft(message.Length, '0');
      else
        binary = binary.Substring(binary.Length - message.Length);
      
      Console.WriteLine(binary);
      Console.WriteLine();
      
      for (int i = 0; i < message.Length; i++)
      {
        if (binary[i] == '1')
          sb.Append(message[i]);
      }
      
      Console.WriteLine(sb.ToString());
      Console.WriteLine();
      return sb.ToString();
  }
}

答案10:

using System;

public class Kata {
  public static string Grille(string message, int code)
        {
            string bin = Convert.ToString(code, 2);

            if (bin.Length < message.Length)
                bin = bin.PadLeft(bin.Length + (message.Length - bin.Length), '0');
            else if (bin.Length > message.Length)
                message = message.PadLeft(message.Length + (bin.Length - message.Length), '_');

            string result = "";

            for(int i = 0; i < message.Length; i++)
            {
                if (bin[i] == '1')
                    result += message[i];
            }

            return result.Replace("_", "");
        }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值