C#基础-057 综合测试题

  /*1.(10分)编写方法,返回1001-2001之间有多少个合数以及所有素数之和。*/
    class Task01
    {
        public static void CompositeNumberAndSumPrime(int startNum, int endNum, out int compositeNum, out int sumPrime)
        {
            sumPrime = 0;
            compositeNum = 0;
            if (startNum > 1)
            {
                for (int i = startNum; i <= endNum; i++)
                {
                    if (IsPrime(i))
                    {
                        Console.WriteLine(i);
                        sumPrime += i;
                    }
                    else
                    {
                        compositeNum++;
                    }
                }
            }
        }

        public static bool IsPrime(int number)
        {
            for (int i = 2; i <= Math.Sqrt(number); i++)
            {
                if (number%i==0)
                {
                    return false;
                }
            }
            return true;
        }
    }
 /*2.(10分) 有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13...  编写方法,求出这个数列的前20项之和。*/
    class Task02
    {
        public static double Sum(int number)
        {
            double sum = 0;
            double[] fra = Fraction(number);
            for (int i = 0; i < fra.Length; i++)
            {
                sum += fra[i];
            }
            return sum;
        }
        public static double[] Fraction(int num)
        {
            double[] ret = new double[num];
            double[] numerator = new double[num];
            double[] denominator = new double[num];
            numerator[0] = 2;
            numerator[1] = 3;
            denominator[0] = 1;
            denominator[1] = 2;
            for (int i = 2; i < num; i++)
            {
                numerator[i] = numerator[i - 1] + numerator[i - 2];
                denominator[i] = denominator[i - 1] + denominator[i - 2];
                ret[i] = numerator[i] / denominator[i];
            }
            ret[0] = numerator[0] / denominator[0];
            ret[1] = numerator[1] / denominator[1];
            return ret;
        }
    }
   /// <summary>
    /// 3.(10分)编写方法,接收参数n,当(n=4)显示如下图形
          //A
          //B B B
          //C C C C C
          //D D D D D D D
    /// </summary>
    class Task03
    {
       public static void Show(int lines)
        {
            for (int i = 1; i <= lines; i++)
            {
                for (int j = 0;j < 2*i-1; j++)
                {
                    Console.Write((char)('A'+i-1)+" ");
                }
                Console.WriteLine();
            }
        }
    }
 /// <summary>
    ///  4.(10分)编写方法,传入一行字符,分别统计出其中汉字、英文字母、空格、数字和其它字符的个数。【注:汉字编码范围('\u4e00' - '\u9fa5')】
    /// </summary>
    class Task04
    {
        public static void Count(char[] chArr, out int chineseNum, out int wordsNum, out int spaceNum, out int figureNum, out int otherNum)
        {
            chineseNum = 0;
            wordsNum = 0;
            spaceNum = 0;
            figureNum = 0;
            otherNum = 0;
            for (int i = 0; i < chArr.Length; i++)
            {
                if (chArr[i]>='a'&&chArr[i]<='z'||chArr[i] >= 'A' && chArr[i] <= 'Z')
                {
                    wordsNum++;
                }
                else if (chArr[i]>= '\u4e00'&&chArr[i]<= '\u9fa5')
                {
                    chineseNum++;
                }
                else if (chArr[i]==' ')
                {
                    spaceNum++;
                }
                else if (chArr[i]>='0'&&chArr[i]<='9')
                {
                    figureNum++;
                }
                else
                {
                    otherNum++;
                }
            }
        }
    }
 /*5.(10分)编写方法,输入两个正整数m和n,求其最大公约数和最小公倍数 。*/
    class Task05
    {
        public static int GongYueShu(int m, int n)
        {
            int gongyue, i;
            gongyue = m; //gongyue存放最大公约数        
            if (gongyue > n)
            {
                gongyue = n; //保证gongyue为m,n中的最小者                     
            }
            for (i = gongyue; i >= 1; i--)  //求最大公约数            
            {
                if ((m % i == 0) && (n % i == 0))
                {
                    break;
                }
            }
            gongyue = i;
            return gongyue;
        }
        public static int GongBeiShu(int m, int n)
        {
            int gongbei, j;
            gongbei = m; //gongbei存放最小公倍数            
            if (gongbei < n)
            {
                gongbei = n; //保证gongbei为m,n中的最大者        
            }
            for (j = gongbei; ; j++)  //求最小公倍数        
            {
                if ((j % m == 0) && (j % n == 0))
                    break;
            }
            gongbei = j;
            return gongbei;
        }
    }
  /*6. (10分)编写方法,参数为a和n,求s=a+aa+aaa+aaaa+aa...a的值,其中a是一个数字,n表示一共几个数。例如2+22+222+2222+22222(此时a=2,n=5)。*/
    class Task06
    {
        public static int Sum(char a,int n)
        {
            int sum = 0;
            string[] number = new string[n];
            string temp = string.Empty;
            for (int i = 0; i < n; i++)
            {
                number[i]=temp.PadLeft(i+1,a);
            }
            foreach (var item in number)
            {
                sum += int.Parse(item);
            }
            return sum;
        }
    }
   /*7.(10分)编写方法,传入数组{3,5,2,3,4,1,2,2},该方法返回新的数组,且里面的元素为重复出现的元素,如{3,2}*/
    class Task07
    {
        public static char[] Repeat(int[] arr)
        {
            string temp = string.Empty;
            for (int i = 0; i < arr.Length - 1; i++)
            {
                if (temp.Contains(arr[i].ToString()) == false)
                {
                    for (int j = i+1; j < arr.Length; j++)
                    {
                        if (arr[i] == arr[j])
                        {
                            temp += arr[i];
                            break;
                        }
                    }
                }
                else
                {
                    continue;
                }
            }
            char[] retArr = temp.ToCharArray();
            return retArr;
        }
    }
 /*8.(10分)利用递归方法求10的阶乘的一半*/
    class Task08
    {
        public static double Factorial(double number)
        {
            if (number<=1)
            {
                return number/2;
            }
            else
            {
                return number * Factorial(number-1);
            }
        }
    }
  /*9.(10分)编写方法,求满足方程 x + 2y + 0.5z + 5w=200(x,y,z都小于100,大于0)的所有可能存在的变量组(x=?,y=?,z=?,w=?)*/
    class Task09
    {
       public static void VariableArr()
        {
            for (int x  = 1; x < 100; x++)
            {
                for (int y = 1; y < 100; y++)
                {
                    for (int z = 1; z < 100; z++)
                    {
                        for (int w = 1; w < 100; w++)
                        {
                            if (x+2*y+0.5*z+5*w == 200)
                            {
                                Console.WriteLine("x={0},y={1},z={2},w={3}",x,y,z,w);
                            }   
                        }
                    }
                }
            }
        }
    }
  /*10.(10分)编写方法,参数为一个字符串,返回所有"你好"的下标,如果不存在返回-1。*/
    class Task10
    {
        public static string SearchStringIndex(string str)
        {
            string temp = string.Empty;
            for (int i = 0; i < str.Length; i++)
            {
                if (str[i] == '你' && str[i + 1] == '好')
                {
                    temp += i+1 + " ";
                }
            }
            if (temp != string.Empty)
            {
                return temp;
            }
            return "-1";
        }
    }
 static void Main(string[] args)
        {
            //Show(1);
            //int compositeNum = 0;
            //int sumPrime = 0;
            //int startNumber = 2;
            //int endNumber = 10;
            //Task01.CompositeNumberAndSumPrime(startNumber,endNumber,out compositeNum,out sumPrime );
            //Console.WriteLine("{0}~{1}之间有{2}个合数,所有素数和为:{3}",startNumber,endNumber,compositeNum,sumPrime);

            //Show(2);
            //int number = 20;
            //Console.WriteLine("分数序列:2/1,3/2,5/3,8/5,13/8,21/13...的前{0}项和为:{1}",number, Task02.Sum(number));

            //Show(3);
            //Task03.Show(8);

            //Show(4);
            //int chineseNum = 0;
            //int wordsNum = 0;
            //int spaceNum = 0;
            //int figureNum = 0;
            //int otherNum = 0;
            //char[] chArr = { 's','f','G','^',' ', ' ', ' ', ' ', '%','5','时','建'};
            //Task04.Count(chArr,out chineseNum,out wordsNum,out spaceNum,out figureNum,out otherNum);
            //Console.WriteLine("这行字符中有{0}个汉字,{1}个字母,{2}个空格,{3}个数字,{4}个其他字符",chineseNum,wordsNum,spaceNum,figureNum,otherNum);

            //Show(5);
            //int m, n;
            //Console.WriteLine("请输入一个正数,按回车键结束!");
            //m = int.Parse(Console.ReadLine());
            //Console.WriteLine("请再输入一个正数,按回车键结束!");
            //n = int.Parse(Console.ReadLine());
            //Console.WriteLine("{0}和{1}的最大公约数是 {2}", m, n, Task05.GongYueShu(m, n));
            //Console.WriteLine("{0}和{1}的最小公倍数是 {2}", m, n, Task05.GongBeiShu(m, n));
            //Console.ReadKey();

            //Show(6);
            //Console.WriteLine(Task06.Sum('8', 3));

            //Show(7);
            //int[] arr = { 3,5,2,3,4,1,2,2,5,4,2,2,4,3 };
            //char[]chArr= Task07.Repeat(arr);
            //ShowChar(chArr);

            //Show(8);
            //Console.WriteLine(Task08.Factorial(10));

            //Show(9);
            //Task09.VariableArr();

            Show(10);
            string str = "asbda54你好不是撒娇吧asBJBL NIHAO好记不记得爱卡基本";
            Console.WriteLine(Task10.SearchStringIndex(str));
        }
        static void Show(int number)
        {
            Console.WriteLine("*************第{0}题*****************",number);
        }
        static void ShowChar(char[]arr)
        {
            for (int i = 0; i < arr.Length; i++)
            {
                Console.Write(arr[i]+" ");
            }
            Console.WriteLine();
        }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值