*************************几个常用经典算法***************************
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();
}
}
}