C#练习题

一:求1000以内所有的完数,并输出所有因子(完数:一个数恰好等于它的所有因子之和)

因子和因数:因子不包括数本身,因数包括数本身

using System;

class MainClass
{
    public static void Main(string[] args)
    {
        for (int i = 1; i <= 1000; i++)
        {
            int sum = 0;
            string str = "";
            for (int j = 1; j < i; j++)
            {
                if (i % j == 0)
                {
                    sum += j;
                    str += j + "+";
                }
            }

            if (sum == i)
            {
                str = str.TrimEnd('+');
                Console.WriteLine($"{i}是完数,因子是{str}");
            }
        }
    }
}

二:一只猴子吃桃子,第一天吃掉桃子总数的一半多一个,第二天又吃掉剩下桃子数量的一半多一个,以后每天吃掉前一天剩下桃子数量的一半多一个,到第n天的时候,只剩下一个桃子,请问他第一天吃的时候一共有多少个桃子。用户输入n的值,计算出第一天吃的时候桃子总数是多少

using System;

namespace Application
{
    class MainClass
    {
        public static void Main(string[] args)
        {
            int count = 1;
            int num = int.Parse(Console.ReadLine());
            for (int i = num - 1; i >= 0; i--)
            {
                count = (count + 1) * 2;
            }
            Console.WriteLine("总数是:" + count);
        }
    }
}

三:一组已经从小到大排序好的整数数组,用户输入一个数字,插入到数组中,使新的数组仍然有序

——解法1

using System;

class MainClass
{
    static void Main(string[] args)
    {
        int[] rawArray = { 1, 2, 4, 7, 10 };
        int[] newArray = new int[rawArray.Length + 1];
        int myNum = int.Parse(Console.ReadLine());

        int insertIndex = 0;
        for (int i = 0; i < rawArray.Length; i++)
        {
            if (myNum > rawArray[i])
            {
                insertIndex = i + 1;
            }
        }

        bool isInsert = false;
        for (int i = 0; i < newArray.Length; i++)
        {
            if (isInsert == false)
            {
                if (i == insertIndex)
                {
                    newArray[i] = myNum;
                    isInsert = true;
                }
                else
                {
                    newArray[i] = rawArray[i];
                }
            }
            else
            {
                newArray[i] = rawArray[i - 1];
            }
        }

        foreach (int item in newArray)
        {
            Console.Write(item + " ");
        }
    }
}

——解法2 

using System;

class MainClass
{
    static void Main(string[] args)
    {
        int[] rawArray = { 1, 2, 4, 7, 10 };
        int[] newArray = new int[rawArray.Length + 1];
        int myNum = int.Parse(Console.ReadLine());

        int rawIndex = 0;
        bool isInsert = false;
        for (int i = 0; i < newArray.Length; i++)
        {
            if (i >= rawArray.Length && isInsert == false)
            {
                newArray[i] = myNum;
                isInsert = true;
                break;
            }
            if (myNum < rawArray[rawIndex] && isInsert == false)
            {
                newArray[i] = myNum;
                isInsert = true;
            }
            else
            {
                newArray[i] = rawArray[rawIndex++];
            }
        }

        foreach (int item in newArray)
        {
            Console.Write(item + " ");
        }
    }
}

四:实现斐波那契数列(1,1,2,3,5,8...)

——函数的递归实现

using System;

class Program
{
    static void Main(string[] args)
    {
        Console.WriteLine(F(6));
    }

    static int F(int n)
    {
        if (n <= 0)
        {
            return 0;
        }
        else if (n <= 2)
        {
            return 1;
        }
        return F(n - 1) + F(n - 2);
    }
}

——普通函数的实现

using System;

class Program
{
    static void Main(string[] args)
    {
        int res = Fun(4);
        Console.WriteLine(res);
    }

    static int Fun(int n)
    {
        int a = 1;
        int b = 1;
        for (int i = 3; i <= n; i++)
        {
            b += a;
            a = b - a;
        }
        return b;
    }
}

五:一个小球从100m的高度自由落下,每次落地后反弹回原高度的一半,求它在第十次落地时,共经过多少米?第十次反弹多高?

using System;

class MainClass
{
    static void Main(string[] args)
    {
        float dis = 0;
        float height = 100;
        for (int i = 0; i < 10; i++)
        {
            if (i == 0)
            {
                dis += height;
            }
            else
            {
                dis += height * 2;
            }
            height /= 2;
        }
        Console.WriteLine($"第十次落地时共经过{dis}米,反弹高度为{height / 2}米");
    }
}

六:求1!+2!+3!+4!+5!

——定义函数去完成每个数字的阶乘

using System;

class Program
{
    static void Main(string[] args)
    {
        int sum = 0;
        for (int i = 1; i <= 5; i++)
        {
            sum += Fun(i);
        }
        Console.WriteLine(sum);
    }

    static int Fun(int n)
    {
        if (n == 1)
            return 1;
        return n * Fun(n - 1);
    }
}

——在Main函数中完成所有操作 

using System;

class Program
{
    static void Main(string[] args)
    {
        long sum = 1;
        for (int i = 1; i <= 20; i++)
        {
            long num = 1;
            for (int j = i; j >= 1; j--)
            {
                num *= j;
            }
            sum += num;
        }
        Console.WriteLine(sum);
    }
}

七:对一个float类型的小数进行四舍五入

——未优化版

using System;

class MainClass
{
    static void Main(string[] args)
    {
        float num = float.Parse(Console.ReadLine());

        int numInteger = (int)num;
        float numFloat = num - numInteger;
        int res = 0;
        if (numFloat >= 0.5f)
        {
            res = ++numInteger;
        }
        else
        {
            res = numInteger;
        }
        Console.WriteLine(res);
    }
}

——优化版

using System;

class Program
{
    static void Main(string[] args)
    {
        float num = float.Parse(Console.ReadLine());

        float res = (int)(num + 0.5f);
        Console.WriteLine(res);
    }
}

八:3个可乐瓶可以换一瓶可乐,现在有364瓶可乐。问一共可以喝多少瓶可乐?剩下几个空瓶?

——解法1

using System;

class MainClass
{
    static void Main(string[] args)
    {
        int drinkCount = 0;
        int totalCount = 364;
        for (int i = 0; i < totalCount; i++)
        {
            drinkCount++;
            if (drinkCount % 3 == 0)
            {
                totalCount++;
            }
        }
        int remain = totalCount % 3;
        Console.WriteLine($"一共可以喝{totalCount}瓶可乐,剩下{remain}个空瓶");
    }
}

——解法2

using System;

class MainClass
{
    public static void Main(string[] args)
    {
        int totalCount = 364;
        int emptyCount = totalCount;
        while (emptyCount >= 3)
        {
            totalCount += emptyCount / 3;
            emptyCount = emptyCount / 3 + emptyCount % 3;
        }
        Console.WriteLine($"一共可以喝{totalCount}瓶可乐,剩下{emptyCount}个空瓶");
    }
}

九:输入一个字符串,字母加密(a-d A-D x-a X-A),其他字符原样输出

using System;

class MainClass
{
    static void Main(string[] args)
    {
        char[] charArray = Console.ReadLine().ToCharArray();

        string str = "";
        for (int i = 0; i < charArray.Length; i++)
        {
            if (charArray[i] >= 'a' && charArray[i] <= 'z')
            {
                if (charArray[i] >= 'x')
                {
                    char temp = (char)(charArray[i] - 'x' + 'a');
                    str += temp;
                }
                else
                {
                    str += (char)(charArray[i] + 3);
                }
                continue;
            }
            if (charArray[i] >= 'A' && charArray[i] <= 'Z')
            {
                if (charArray[i] >= 'X')
                {
                    char temp = (char)(charArray[i] - 'X' + 'A');
                    str += temp;
                }
                else
                {
                    str += (char)(charArray[i] + 3);
                }
                continue;
            }
        }
        Console.WriteLine("加密后的密码为:" + str);
    }
}

十:控制台输出九九乘法表

using System;

class MainClass
{
    public static void Main(string[] args)
    {
        for (int i = 1; i <= 9; i++)
        {
            for (int j = 1; j <= i; j++)
            {
                Console.Write($"{j}*{i}={i * j} ");
            }
            Console.WriteLine();
        }
    }
}

​

十一:输出1000以内的素数

素数(质数):大于1的自然数,除了1和本身外,不再有其他的因数

using System;

class MainClass
{
    public static void Main(string[] args)
    {
        for (int i = 2; i <= 1000; i++)
        {
            bool right = true;
            //这里的i/2进行了算法优化
            for (int j = 2; j < i / 2; j++)
            {
                if (i % j == 0)
                {
                    right = false;
                    break;
                }
            }
            if (right)
            {
                Console.WriteLine(i + "是素数");
            }
        }
    }
}

十二:控制台随机一个1-100的数字,让用户猜数字,如果输入的数字比随机数大或者小就提示用户并且继续输入,直到输入正确的数字后退出程序

using System;

class MainClass
{
    static void Main(string[] args)
    {
        Random r = new Random();
        int n = r.Next(1, 101);

        Console.WriteLine("please input a num");
        while (true)
        {
            int num = int.Parse(Console.ReadLine());
            if (num > n)
            {
                Console.WriteLine("输入的数字大了");
            }
            else if (num < n)
            {
                Console.WriteLine("输入的数字小了");
            }
            else
            {
                Console.WriteLine("猜对了!");
                break;
            }
        }
    }
}

十三:输出100-9999之间的水仙花数(水仙花数:153=1*1*1+5*5*5+3*3*3)

using System;

class Program
{
    static void Main(string[] args)
    {
        for (int i = 100; i <= 9999; i++)
        {
            double sum = 0;
            char[] charArray = i.ToString().ToCharArray();
            for (int j = 0; j < charArray.Length; j++)
            {
                charArray[j] -= '0';
                sum += Math.Pow(charArray[j], 3);
            }

            if (sum == i)
            {
                Console.WriteLine(i + "是水仙花数");
            }
        }
    }
}

十四:输入两个数,求最大公约数和最小公倍数

using System;

class Program
{
    static void Main(string[] args)
    {
        Console.WriteLine("请输入两个数");
        int n1 = int.Parse(Console.ReadLine());
        int n2 = int.Parse(Console.ReadLine());

        int res1 = 0;
        for (int i = 1; i <= n1 && i <= n2; i++)
        {
            if (n1 % i == 0 && n2 % i == 0)
            {
                res1 = i;
            }
        }

        int res2 = 0;
        if (n1 > n2)
        {
            res2 = n1;
        }
        else
        {
            res2 = n2;
        }
        while (true)
        {
            if (res2 % n1 == 0 && res2 % n2 == 0)
            {
                break;
            }
            res2++;
        }
        Console.WriteLine($"最大公约数是{res1},最小公倍数是{res2}");
    }
}

十五:初始化一个10个元素的数组,赋值为0-9,乱序后,输出

using System;

class Program
{
    static void Main(string[] args)
    {
        int[] num = new int[10];
        for (int i = 0; i < num.Length; i++)
        {
            num[i] = i;
        }

        Console.WriteLine("正序数组————");
        foreach (int item in num)
        {
            Console.Write(item + " ");
        }
        Console.WriteLine();

        Random r = new Random();
        for (int i = 0; i < num.Length; i++)
        {
            int newIndex = r.Next(0, 10);

            int temp = num[i];
            num[i] = num[newIndex];
            num[newIndex] = temp;
        }

        Console.WriteLine("乱序数组————");
        foreach (int item in num)
        {
            Console.Write(item + " ");
        }
    }
}

十六:先用随机数初始化一个数组(20个元素),之后将奇数放左边,偶数放右边

using System;
using System.Collections.Generic;

class Program
{
    static void Main(string[] args)
    {
        int[] num = new int[20];
        Random r = new Random();
        for (int i = 0; i < num.Length; i++)
        {
            int n = r.Next(1, 21);
            num[i] = n;
        }
        Console.WriteLine("排序前————");
        foreach (int item in num)
        {
            Console.Write(item + " ");
        }

        List<int> oddList = new List<int>();
        List<int> evenList = new List<int>();
        for (int i = 0; i < num.Length; i++)
        {
            if (num[i] % 2 == 0)
            {
                evenList.Add(num[i]);
            }
            else
            {
                oddList.Add(num[i]);
            }
        }

        int[] newNum = new int[20];
        int oddIndex = 0;
        int evenIndex = 0;
        for (int i = 0; i < newNum.Length; i++)
        {
            if (oddIndex < oddList.Count)
            {
                newNum[i] = oddList[oddIndex++];
            }
            else
            {
                newNum[i] = evenList[evenIndex++];
            }
        }
        Console.WriteLine("排序后————");
        foreach (int item in newNum)
        {
            Console.Write(item + " ");
        }
    }
}

十七:输出以下数组
        1 1 1 1 1 1 1 1 1 
        1 2 2 2 2 2 2 2 1
        1 2 3 3 3 3 3 2 1
        1 2 3 4 4 4 3 2 1
        1 2 3 4 5 4 3 2 1
        1 2 3 4 4 4 3 2 1
        1 2 3 3 3 3 3 2 1
        1 2 2 2 2 2 2 2 1
        1 1 1 1 1 1 1 1 1 

class Program
{
    static void Main(string[] args)
    {
        for (int i = 1; i <= 9; i++)
        {
            for (int j = 1; j <= 9; j++)
            {
                if (i == 1 || j == 1 || i == 9 || j == 9)
                {
                    Console.Write("1 ");
                }
                else if (i == 2 || j == 2 || i == 8 || j == 8)
                {
                    Console.Write("2 ");
                }
                else if (i == 3 || j == 3 || i == 7 || j == 7)
                {
                    Console.Write("3 ");
                }
                else if (i == 4 || j == 4 || i == 6 || j == 6)
                {
                    Console.Write("4 ");
                }
                else if (i == 5 || j == 5)
                {
                    Console.Write("5 ");
                }
            }
            Console.WriteLine();
        }
    }
}

十八:输出杨辉三角
          1
        1  1
      1  2  1
    1  3   3  1
  1  4   6  4  1

using System;

class Program
{
    static void Main(string[] args)
    {
        Console.Write("输入杨辉三角长度:");
        int length = Convert.ToInt32(Console.ReadLine());//指定杨辉三角形的长度
        int[][] a = new int[length][];
        for (int i = 0; i < a.Length; i++)
            a[i] = new int[i + 1];
        for (int j = 0; j < a.Length; j++)
        {
            a[j][0] = 1;
            a[j][j] = 1;
            for (int m = 1; m < a[j].Length - 1; m++)
                a[j][m] = a[j - 1][m - 1] + a[j - 1][m];
        }
        for (int i = 0; i < a.Length; i++)
        {
            for (int k = 0; k < length - i; k++)
                Console.Write(" ");
            for (int j = 0; j < a[i].Length; j++)
                Console.Write("{0} ", a[i][j]);
            Console.Write("\n");
        }
    }
}

十九:输入一个十进制数,转换为二进制数输出

using System;

class Program
{
    static void Main(string[] args)
    {
        Console.WriteLine("请输入一个数字");
        int num = int.Parse(Console.ReadLine());
        int rawNum = num;

        string str = "";
        while (num != 0)
        {
            str += num % 2;
            num /= 2;
        }

        string res = "";
        for (int i = str.Length - 1; i >= 0; i--)
        {
            res += str[i];
        }
        Console.WriteLine($"{rawNum}的二进制数为:{res}");
    }
}

二十:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Hello Bug.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值