zoukankan      html  css  js  c++  java
  • [转]C#算法题

    1:不允许使用循环语句、条件语句,在控制台中打印出1-200这200个数。

    参考答案:这里我使用的是递归。

    static void Main(string[] args)
            {
                Print(1);
                Console.Read();
            }
    
            private static void Print(int number)
            {
                try
                {
                    Console.WriteLine(number);
                    int i = 1/(200 - number);
                    number = number + 1;
                    Print(number);
                }
                catch (DivideByZeroException e)
                {
                }
            }
     private static bool Print(int number)
            {
                Console.WriteLine(number);
                return number >= 200 || Print(number + 1);
            }

    2:有5个Aspx页面,分别为"Page_1.aspx","Page_10.aspx","Page_100.aspx","Page_11.aspx","Page_111.aspx",请编写代码,让5个Aspx页面按下面的顺序输出:

    Page_1.aspx

    Page_10.aspx

    Page_11.aspx

    Page_100.aspx

    Page_111.aspx

    参考答案:

    private static void Order()
            {
                var pageList = new[] { "Page_1.aspx", "Page_10.aspx", "Page_100.aspx", "Page_11.aspx", "Page_111.aspx" };
                pageList = pageList.OrderBy(s => int.Parse(Regex.Match(s, @"d+").Value)).ToArray();
                Array.ForEach(pageList,Console.WriteLine);
            }

    3:给定一个字符串,试编写代码,实现重复N倍输出字符串的功能。

    这个题目要注意的是char在C#中占用的是两个字节。

    参考答案:

    private static string RepeatString(string str, int repeatCount)
            {
                var source = str.ToCharArray();
                var dest = new char[source.Length * repeatCount];
                for (int i = 0; i < repeatCount; i++)
                {
                    Buffer.BlockCopy(source, 0, dest, source.Length * i * 2, source.Length * 2);
                }
                return new String(dest);
            }

    4:给定一个整形数组,请用16进制的方式显示数组的值。

    比方:一个short类型数组:[255,255,255],输出的结果为 00FF 00FF 00FF,如果是byte类型,则输出为 FF FF FF

    参考答案:

     private static void DisplayArrayValues(Array arr)
            {
                int elementLength = Buffer.ByteLength(arr) / arr.Length;
                string formatString = String.Format("{{0:X{0}}} ", 2 * elementLength);
                for (int ctr = 0; ctr < arr.Length; ctr++)
                    Console.Write(formatString, arr.GetValue(ctr));
                Console.WriteLine();
            }

    5:请自行实现一个函数,该函数的功能是将用户输入的numeric string 转换为integer。

    参考答案:

    private static int StringToInt(string str)
            {
                int result = 0;
                if (Regex.IsMatch(str, @"^-?[0-9]d*"))
                {
                    bool isNegative = false;
                    if (str.IndexOf('-') != -1)
                    {
                        str = str.Substring(1);
                        isNegative = true;
                    }
                    for (int i = 0; i < str.Length; i++)
                    {
                        result = result * 10 + (str[i] - '0');
                    }
                    result = isNegative ? result * -1 : result;
                }
                return result;
            }

    6:给定一个整数num,判断这个整数是否是2的N次方。

    参考答案:

    private static bool GetFlag(int num)
            {
                if (num < 1) return false;
                return (num & num - 1) == 0;
            }

    7:试编写一副52张扑克牌的洗牌算法。

    提示:每次洗牌的时候,给牌一个随机因子。

    private static void Shuffle()
            {
                var random = new Random();
                var result = new List<string>();
                string[] cardType = { "红桃", "黑桃", "方块", "梅花" };
                string[] cardValue = { "A", "2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K" };
                foreach (string type in cardType)
                {
                    var list = cardValue.Select(value => string.Format("{0}{1}", type, value));
                    result.AddRange(list);
                }
                result = (from c in result orderby random.Next(0, 51) descending select c).ToList();
                result.ForEach(str => Console.Write("{0},", str));
            }

    8:一个牧场目前一共有20头刚出生的羊,母羊、公羊各一半。假如母羊5岁时后每年生一胎(母羊,公羊各一半)。羊活到10岁后死亡。请问20年后这个牧场有多少只羊? 请用C#写出算法。

    这个题目原题有点蛋疼,我按我的意思,修改了下题目。

     给出参考答案:

    假如一胎生一只公羊和一只母羊。

    static void Main(string[] args)
            {
                int sheepCount;
                for (int i = 1; i <= 20; i++)
                {
                    sheepCount = GetSheepCount(i) - GetDeathSheepCount(i);
                    Console.WriteLine(sheepCount);
                }
             }
    private static int GetSheepCount(int year)
            {
                if (year <= 4)
                    return 20;
                return GetSheepCount(year - 1) + GetSheepCount(year - 5) - GetDeathSheepCount(year);
            }
    
            private static int GetDeathSheepCount(int year)
            {
                if (year < 10)
                    return 0;
                return GetSheepCount(year - 10);
            }
  • 相关阅读:
    MySQL数据库的优化
    PHP中获取文件扩展名
    PHP实现几种经典算法详解
    Linux服务器上crontab定时执行脚本文件
    LeetCode每日一题(五):加一
    巧妙利用枚举找出数组元素所在区间
    PHP实现几种经典算法详解
    _initialize() 区别 __construct()
    LeetCode每日一题(四):搜索插入位置
    LeetCode每日一题(三):移除元素
  • 原文地址:https://www.cnblogs.com/BrokenIce/p/5344958.html
Copyright © 2011-2022 走看看