一、
数组:解决同一类大量数据在内存存储和运算的功能。
1、一维数组
定义:制定类型,指定长度,指定名称。
int[] a=new int[5]
int[] a=new int[5]{23,23,23,1,2,1}
int[] a=new int[]{45,23,34}会把前三个值赋值,后两个元素保持默认值0.
int[] a=new int[]{34,234,5,3,4,23};
取值:
数组名[下标值]
数组的优点:
1.对于大量数据来说,保存的时候,定义一个数组即可解决。
2.用循环来控制数组的下标,可以对数组进行批量操作。
eg.
int[] a=new int[5];
//数组的批量赋值
for(int i=0;i<5;i++)
{
a[i]=(i+1)*4;
}
//数组的批量取值
for(int j=0;j<5;j++)
{
console.writeline(a[j]);
}
案例一:做一个教练为10个球员打分的程序。
数组的应用
一、冒泡排序
1.冒泡排序是用双层循环解决。外层循环的是趟数,里层循环的是次数。
2.趟数=n-1;次数=n-趟数。
3.里层循环使用if比较相邻的两个数的大小。进行数值交换。
程序如下
1 static void Main2(string[] args) 2 { 3 int[] a = new int[8] { 9, 12, 7, 5, 15, 2, 1, 8 }; 4 for (int i = 1; i <= a.Length - 1; i++)//趟数 5 { 6 for (int j = 1; j <= a.Length - i; j++)//次数, 趟数+次数==数组个数,a.Length - i,每趟都有沉到底的一个不用再排 7 { 8 if (a[j - 1] < a[j]) 9 { 10 int t = a[j - 1]; 11 a[j - 1] = a[j]; 12 a[j] = t; 13 } 14 } 15 } 16 //显示 17 for (int k = 0; k < a.Length; k++) 18 { 19 Console.WriteLine(a[k]); 20 } 21 Console.ReadKey(); 22 }
二、折半查找
前提:数组必须是有序的
思路:用两个变量分别代表上限(top)和下限(bottom)的下标,再用一个变量代表中间的下标(mid)。
1.求中间的下标:mid=(top+bottom)/2
2.上限下标下移:top=mid+1.假设数组是升序排列。
3.下限下标上移:bottom=mid-1.
4.循环条件是:bottom>=top
程序如下:
1 //折半查找 2 static void Main3(string[] args) 3 { 4 int[] d = new int[] { 3, 5, 7, 9, 11, 13, 14, 18 }; 5 Console.Write("请输入要查找的数字:"); 6 int find = Convert.ToInt32(Console.ReadLine()); 7 int top = 0; 8 int bottom = d.Length - 1; 9 int mid; 10 while (top <= bottom) 11 { 12 //取中间的坐标 13 mid = (bottom + top) / 2; 14 //取中间的值 15 int n = d[mid]; 16 if (find > n) 17 { 18 top = mid + 1; 19 } 20 else if (find < n) 21 { 22 bottom = mid - 1; 23 } 24 else 25 { 26 Console.WriteLine("你找到了该数字,在第" + (mid + 1) + "个"); 27 break; 28 } 29 } 30 Console.ReadKey(); 31 }
二维数组
eg.1推箱子
eg.2 抽手机号中奖问题
1 //eg.8 抽奖游戏 2 static void Main8(string[] args) 3 { 4 Console.WriteLine("请输入要抽奖的手机号的个数:"); 5 int a = int.Parse(Console.ReadLine()); 6 7 string[] b=new string[a]; 8 9 for (int i = 0; i < b.Length; i++) 10 { 11 Console.WriteLine("请输入第"+(i+1)+"个手机号:"); 12 b[i] = Console.ReadLine(); 13 } 14 15 DateTime dt = DateTime.Now; 16 dt = dt.AddSeconds(5); 17 while (true) 18 { 19 for (int i = 0; i < b.Length;i++ ) 20 { 21 Console.Clear(); 22 Console.WriteLine(b[i]); 23 Thread.Sleep(50); 24 25 //break 跳出的只是for 不是 while 循环,错误 26 //if (dt.ToString("yyyy/MM/ddHHmmss") == DateTime.Now.ToString("yyyy/MM/ddHHmmss")) 27 //{ 28 // //Console.WriteLine("18753351659"); 29 // break; 30 //} 31 //else 32 //{ 33 34 //} 35 36 37 } 38 39 if (dt.ToString() == DateTime.Now.ToString()) 40 { 41 //Console.WriteLine("18753351659"); 42 break; 43 } 44 else 45 { 46 47 } 48 } 49 //Console.Clear(); 作弊方法 50 //Console.WriteLine("18753351639"); 51 Console.ReadLine(); 52 }
eg.3 红篮球摇号问题
1 //eg.9 摇号 蓝球,红球 2 static void Main9(string[] args) 3 { 4 //int lan = 0; 5 string[] a = new string[8]; 6 Random r = new Random(); 7 8 //a[0] =Convert.ToString(r.Next(17)); 9 //a[1] = " "; 10 11 int i = 2; 12 for ( ; i<= a.Length - 1; ) 13 { 14 int b = r.Next(34); 15 //if(a.Contains(a[i])),这样就永远返回true类型了 16 if (a.Contains(b.ToString())) 17 { 18 continue; 19 } 20 else 21 { 22 a[i] = b.ToString(); 23 i++; 24 } 25 } 26 27 a[0] = Convert.ToString(r.Next(17)); 28 a[1] = " "; 29 30 foreach (string j in a) 31 { 32 Console.Write(j+"\t"); 33 } 34 }
eg.4 投票选举问题(下标的选择 也可由投票的号码来定)
1 //eg.5-1 投票 0--代表第一个人候选人,1代表第二个候选人。。。。共5个人(老师版) 2 static void Main51(string[] args) 3 { 4 //30 5 int[] vote = new int[5]; 6 for (int i = 0; i < 20; i++) 7 { 8 Console.Write("请第" + (i + 1) + "位同学投票(0-4):"); 9 int temp = Convert.ToInt32(Console.ReadLine()); 10 if (temp < 0 || temp > 4) 11 { 12 Console.WriteLine("废票"); 13 continue; 14 } 15 else 16 { 17 vote[temp]++; 18 } 19 } 20 21 //计算最终得票 22 int max = 0, maxSub = 0; 23 for (int i = 0; i < vote.Length; i++) 24 { 25 //把每位候选人的票数显示出来。 26 Console.WriteLine("第" + (i + 1) + "号候选人的票数是" + vote[i]); 27 //计算谁得票最多 28 if (vote[i] > max) 29 { 30 max = vote[i]; 31 maxSub = i; 32 } 33 } 34 //显示最终结果 35 Console.WriteLine("最终投票结果为:" + maxSub + "号候选人当选,当选的票数是" + max + "票。"); 36 Console.ReadKey(); 37 } 38 //eg.5-2 投票 1--代表第一个人候选人,2代表第二个候选人。。。。共5个人 39 static void Main52(string[] args) 40 { 41 int[] ren = new int[20]; 42 int[] vote = new int[5]; 43 44 for (int i = 0; i <= ren.Length - 1; i++) 45 { 46 Console.WriteLine("请第" + (i + 1) + "公民投票:"); 47 ren[i] = int.Parse(Console.ReadLine()); 48 if (ren[i] > 5 || ren[i] < 0) 49 { 50 Console.WriteLine("废票,请重投票!"); 51 i--; 52 continue; 53 } 54 else 55 { 56 vote[ren[i] - 1]++; 57 } 58 } 59 60 int max = vote[0]; 61 for (int i = 0; i < vote.Length; i++) 62 { 63 if (max <= vote[i]) 64 { 65 max = vote[i]; 66 } 67 } 68 Console.WriteLine("最高票数是{0}票", max); 69 70 for (int i = 0; i < vote.Length; i++) 71 { 72 if (max == vote[i]) 73 { 74 //int y = i + 1; 75 Console.WriteLine("候选人是第{0}位选手。", i + 1); 76 } 77 } 78 }
时间: 2024-10-10 01:15:16