几个常用经典算法(收集)

*************************几个常用经典算法***************************

 

1。从键盘输入100个数字,编写代码对它们排序

2.一组数值排列规则为:1,1,2,3,5,8,13,21,34……,请用递归算法求第30位数值

3. 用户输入20个数字,如何快速选出最大的数字和最小的数字

4.假设蓝光DVD光盘8元/张,普通DVD光盘为3元/张,CD光盘为0.25元/张。

  某客户希望花100元购买这3种光盘,购买数量为100张。求各为多少张?

5.如何在从小到大排序的数字序列中搜索用户指定的数字,并返回这个数字在序列中的位置?

6.随即输出1到100内的整数

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

 

namespace Suanfa

{

   class Program

    {

 

       static void Main(string[] args)

       {

           //Paixun.Paixu();

           Suiji.Sui();

           //Suiji.Sui2();

           //Pannumber.PanShu();

           //Maxmin.Maxm();

           //Digui.GetNum();

           //Sousuo.Sous();

 

       }

    }

          //1.从键盘输入100个数字,编写代码对它们排序

          class Paixun

    {

      public static void Paixu()

       {

           int i, j, temp;

           int[] MyArr = new int[10];//定义int类型MyArr数组,包含10个子项

           for (i = 0; i < 10; i++)

           {

                MyArr[i] =Convert.ToInt32(Console.ReadLine());

 

 

           }

           for (j = MyArr.Length - 1; j > 0; j--)

           {

                for (i = 0; i < j; i++)

                {

                    //如果当前子项值大于其后的子项值,则将子项值交换

                    if (MyArr[i] > MyArr[i +1])

                    {

                        temp = MyArr[i];

                        MyArr[i] = MyArr[i +1];

                        MyArr[i + 1] = temp;

 

                    }

                }

           }

           //输出MyArr数组中所有的咨询值

           for (i = 0; i < MyArr.Length; i++)

           {

               Console.WriteLine(MyArr[i].ToString());

           }

           Console.ReadKey();

       }

    }

          //2.一组数值排列规则为:1,1,2,3,5,8,13,21,34……,请用递归算法求第30位数值

         classDigui

    {

 

       public static int  Dig( int n)

       {

           if (n <= 1)

           {

                return 1;

           }

           return Dig(n - 1) + Dig(n - 2);

 

       }

       public static void GetNum()

       {

           Console.WriteLine("第30个的值为:{0}",Dig(29));

           Console.ReadKey();

        }

    }

          //3.用户输入20个数字,如何快速选出最大的数字和最小的数字

         classMaxmin

    {

 

       public static void Maxm()

       {

           int i, temp, max, min;

           int[] MyArr = new int[20];

           for (i = 0; i < 20; i++)

           {

                MyArr[i] =Convert.ToInt32(Console.ReadLine());

           }

           //将数组子项中值较小的部分放置于数组的前半部分

           //将数组子项中值较大的部分放置于数组的后半部分

           for (i = 0; i < (MyArr.Length + 1) / 2; i++)

           {

                if (MyArr[i] > MyArr[MyArr.Length- 1 - i])

                {

                    temp = MyArr[i];

                    MyArr[i] =MyArr[MyArr.Length - 1 - i];

                    MyArr[MyArr.Length - 1 - i]= temp;

                }

           }

           //将数组索引号为0的子项值付给min变量

           min = MyArr[0];

           //将末端的子项赋给max变量

           max = MyArr[MyArr.Length - 1];

           //前半部分比较

           for (i = 0; i < (MyArr.Length + 1) / 2; i++)

           {

                if (min > MyArr[i])

                {

                    min = MyArr[i];

                }

           }

           for (i = (MyArr.Length / 2); i < MyArr.Length; i++)

           {

                if (max < MyArr[i])

                {

                    max = MyArr[i];

                }

            }

           Console.WriteLine("最小值为:{0},最大值为:{1}", min, max);

           Console.ReadKey();

 

 

       }

    }

         //4.假设蓝光DVD光盘8元/张,普通DVD光盘为3元/张,CD光盘为0.25元/张。某客户希望花100元购买这3种光盘,购买数量为100张。求各为多少张?

          class Pannumber

    {

       //假设蓝光DVD光盘8元/张,普通DVD光盘为3元/张,CD光盘为0.25元/张。

       //某客户希望花100元购买这3种光盘,购买数量为100张。求各为多少张?

       public static void PanShu()

       {

           //i,j,k代表每种光盘是购买数量,m代表购买总数,n代表总价格

           double i, j, k, m, n;

           for (i = 0; i < 100; i++)

           {

                for (j = 0; j < 100; j++)

                {

                    for (k = 0; k < 100;k++)

                    {

                        m = i + j + k;

                        n = 8 * i + 3 * j +0.25 * k;

                        if ((m == 100)&& (n == 100))

                        {

                           Console.WriteLine("{0},{1},{2}",i,j,k);

                            Console.ReadKey();

                        }

                    }

                }

           }

 

 

       }

    }

          //5.如何在从小到大排序的数字序列中搜索用户指定的数字,并返回这个数字在序列中的位置?

           class Sousuo

    {

 

       public static void Sous()

       {

           int[] MyArr={100,102,105,108,109,112};

           Console.WriteLine("输入所需查找的分数:");

           int score = Convert.ToInt32(Console.ReadLine());

           int index = SelectScore(MyArr, score, MyArr.Length);

           if (index < 0)

           {

                Console.WriteLine("你查找的分数不在MyArr成绩数组中");

           }

           else

           {

                Console.WriteLine("你找查的分数已在MyArr成绩数组中找到,其所在子项索引号为:{0}", index.ToString());

           }

           Console.ReadKey();

       }

       public static int SelectScore(int[] arr, int score, int n)

       {

           int left = 0;

           int right = n - 1;

           int middle;

           while (left <= right)

           {

                middle = (left + right) / 2;

                if (score == arr[middle])

                {

                    return middle;

                }

                if (score < arr[middle])

                {

                    right = middle - 1;

                }

                else

                {

                    left = middle - 1;

                }

           }

           return -1;

       }

    }

         //6.随即输出1到100内的整数

            class Suiji

    {

                   //方法1

       public static void Sui()

       {

           int[] intArr = new int[100];

           ArrayList myList = new ArrayList();

           Random rnd = new Random();

           while (myList.Count <= 100)

           {

                int num = rnd.Next(1, 102);

                if (!myList.Contains(num))

                    myList.Add(num);

           }

           //myList.Sort();

           for (int i = 0; i < 100; i++)

           {

                intArr[i] = (int)myList[i];

                Console.WriteLine(intArr[i]);

           }

 

           Console.ReadKey();

 

       }

                   //方法2

       public static void Sui2()

       {

           //可以跑下这段代码,C#点的:

           int len = 100;

           List<int> array = new List<int>();

           for (int i = 0; i < len; i++)

           {

                array.Add(i + 1);

           }

 

           //如果希望打乱顺序加上下面这段(Shuffle,洗牌算法)

           Random r = new Random();

           for (int i = 0; i < len - 1; i++)

           {

                int tmp = array[i];

                int pos = i + r.Next(0, len -i);

                array[i] = array[pos];

                array[pos] = tmp;

           }

 

           //顺序排序

           //array.Sort();

 

           //希望控制台输出:

           foreach (int a in array)

           {

                Console.WriteLine(a);

           }

 

           Console.ReadKey();

       }

    }

}

转载于:https://www.cnblogs.com/dxj143/archive/2010/05/21/1740613.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值