C#整理6——数组的应用

数组的应用:
(一).冒泡排序。
1.冒泡排序是用双层循环解决。外层循环的是趟数,里层循环的是次数。
2.趟数=n-1;次数=n-趟数。
3.里层循环使用if比较相临的两个数的大小,进行数值交换。

作业:
1.先把冒泡排序写一遍。

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using System.Text;
 5
 6 namespace ConsoleApplication1
 7 {
 8     class Class2
 9     {
10         static void Main(string[] args)
11         {
12             int[] a = new int[8] { 9, 12, 7, 5, 15, 2, 1, 8 };
13             //冒泡排序。
14             for(int i=1;i<=a.Length-1;i++) //趟数
15             {
16                 for (int j = 1; j <= a.Length - i; j++)//次数
17                 {
18                     if(a[j-1] > a[j])
19                     {
20                         int t = a[j - 1];
21                         a[j - 1] = a[j];
22                         a[j] = t;
23                     }
24                 }
25             }
26
27             //显示
28             for(int k=0;k<a.Length;k++)
29             {
30                 Console.WriteLine(a[k]);
31             }
32         }
33     }
34 }

2.使用冒泡排序,做青歌赛的打分程序。要求去掉两个最高,两个最低分,求平均得分。

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using System.Text;
 5
 6 namespace ConsoleApplication1
 7 {
 8     class Class1
 9     {
10         static void Main(string[] args)
11         {
12             int[] a = new int[10];
13             //亮分
14             ShuRu(a);
15
16             //排序
17             PaiXu(a);
18
19             //运算求平均
20             double avg = YunSuan(a);
21
22             //输出显示
23             ShuChu(a, avg);
24         }
25
26         private static void ShuChu(int[] a, double avg)
27         {
28             Console.WriteLine("去掉两个最高分:" + a[0] + "和" + a[1]);
29             Console.WriteLine("去掉两个最低分:" + a[a.Length - 1] + "和" + a[a.Length - 2]);
30             Console.WriteLine("该选手最终得分为:" + avg);
31         }
32
33         private static double YunSuan(int[] a)
34         {
35             //求总分
36             int sum = 0;
37             for (int i = 2; i <= a.Length - 3; i++)
38             {
39                 sum += a[i];
40             }
41             //求平均
42             double avg = (1.0 * sum) / (a.Length - 4);
43             return avg;
44         }
45
46         private static void PaiXu(int[] a)
47         {
48             for (int i = 1; i <= a.Length - 1; i++)
49             {
50                 for (int j = 1; j <= a.Length - i; j++)
51                 {
52                     if (a[j] > a[j - 1])
53                     {
54                         int temp = a[j];
55                         a[j] = a[j - 1];
56                         a[j - 1] = temp;
57                     }
58                 }
59             }
60         }
61
62         private static void ShuRu(int[] a)
63         {
64             for (int i = 0; i < a.Length; i++)
65             {
66                 Console.Write("请第" + (i + 1) + "号评委亮分:");
67                 a[i] = Convert.ToInt32(Console.ReadLine());
68             }
69         }
70     }
71 }

代码。

(二).折半查找。
前提:数组必须是有序的。
思路:用两个变量分别代表上限(top)和下限(bottom)的下标,再用一个变量代表中间(mid)的下标。
1.求中间下标:mid = (top+bottom)/2
2.上限下标下移:top = mid+1. 假设数组是升序排列。
3.下限下标上移:bottom = mid-1;
4.循环条件是:bottom>=top

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using System.Text;
 5
 6 namespace ConsoleApplication1
 7 {
 8     class Class3
 9     {
10         static void Main(string[] args)
11         {
12             int[] a = new int[] { 3, 5, 7, 9, 11, 13, 14, 18 };
13
14             Console.Write("请输入要找的数:");
15             int find = Convert.ToInt32(Console.ReadLine());
16
17             int top, bottom, mid;  //上限下标,下限下标,中间下标
18             top = 0;
19             bottom = a.Length - 1;
20
21             while(bottom>=top)  //只要下限下标还在上限下标的下面,就循环,否则没找到就结束。
22             {
23                 //算中间下标
24                 mid = (top + bottom) / 2;
25                 //取中间的值
26                 int n = a[mid];
27                 if(n < find)
28                 {
29                     top = mid + 1;      //调整上限的下标
30                 }
31                 else if(n>find)
32                 {
33                     bottom = mid - 1;// 调整下限的下标。
34                 }
35                 else
36                 {
37                     Console.WriteLine("找到了,在第" + mid + "个元素上");
38                     break;
39                 }
40             }
41         }
42     }
43 }

二维数组:
表格的模型。
定义:
数据类型[,] 数组名 = new 数组类型[维度长度,维度长度];
int[,] a = new int[3,4];
int[,] a = new int[3, 4] { { 1, 2, 3, 4 },{ 5, 6, 7, 8 }, { 9, 0, 9, 8 } };
赋值:
数组名[下标,下标] = 值;
a[0,0] = 5;
a[2,3] = 10;
取值:
数组名[下标,下标];
应用:

语文 数学 总分

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using System.Text;
 5
 6 namespace ConsoleApplication1
 7 {
 8     class Program
 9     {
10         static void Main(string[] args)
11         {
12             int[,] a = new int[3, 4];
13             //输入
14             for (int i = 0; i < 3; i++)
15             {
16                 //自动生成学号
17                 a[i, 0] = i + 1;
18                 //语文成绩
19                 Console.Write("语文:");
20                 a[i, 1] = Convert.ToInt32(Console.ReadLine());
21                 //数学成绩
22                 Console.Write("数学:");
23                 a[i, 2] = Convert.ToInt32(Console.ReadLine());
24                 //总分
25                 a[i, 3] = a[i, 1] + a[i, 2];
26
27             }
28             //显示
29             Console.WriteLine("学号\t语文\t数学\t总分");
30             for (int i = 0; i < 3; i++)
31             {
32                 for (int j = 0; j < 4; j++)
33                 {
34                     Console.Write(a[i, j] + "\t");
35
36                 }
37                 Console.WriteLine();
38             }
39         }
40     }
41 }

搬箱子

  1 using System;
  2 using System.Collections.Generic;
  3 using System.Linq;
  4 using System.Text;
  5
  6 namespace ConsoleApplication1
  7 {
  8     class Program
  9     {
 10         static void Main(string[] args)
 11         {
 12             int x = 3, y = 1;//记录小人初始位置
 13             int[,] map = new int[10, 10]
 14 {
 15 {1,1,1,1,1,1,1,1,1,1},
 16 {1,0,0,0,0,1,0,0,0,1},
 17 {1,0,0,0,0,1,0,0,0,1},
 18 {1,4,2,0,0,0,0,0,0,1},
 19 {1,0,0,0,0,0,0,0,0,1},
 20 {1,0,0,0,0,0,0,0,0,1},
 21 {1,0,0,0,0,0,0,0,0,1},
 22 {1,1,1,1,1,0,0,0,0,1},
 23 {1,0,0,0,0,0,0,0,3,1},
 24 {1,1,1,1,1,1,1,1,1,1}
 25 };
 26
 27             //在键盘接受指令,对指令分析运算,输出数据
 28             while (true)//无数次执行循环体
 29             {
 30                 for (int i = 0; i < 10; i++)//打印初始图
 31                 {
 32                     for (int j = 0; j < 10; j++)
 33                     {
 34                         if (map[i, j] == 0)
 35                         {
 36                             Console.Write(" ");
 37                         }
 38                         else if (map[i, j] == 1)
 39                         {
 40                             Console.Write("■");
 41                         }
 42                         else if (map[i, j] == 2)
 43                         {
 44                             Console.Write("□");
 45                         }
 46                         else if (map[i, j] == 3)
 47                         {
 48                             Console.Write("★");
 49                         }
 50                         else if (map[i, j] == 4)
 51                         {
 52                             Console.Write("♀");
 53                         }
 54                     }
 55
 56                     Console.WriteLine();
 57                 }
 58
 59                 ConsoleKeyInfo s = Console.ReadKey();//在键盘接受指令
 60                 int t = map[x, y];
 61
 62                 if (s.Key.ToString() == "RightArrow")//若接受指令为“→”,
 63                 {
 64                     if (map[x, y + 1] == 0)//若右边方格为空格,小人物与空格交换数据
 65                     {
 66                         map[x, y] = map[x, y + 1];
 67                         map[x, y + 1] = t;
 68                         y++;
 69                     }
 70                     else if (map[x, y + 1] == 2 && map[x, y + 2] != 1)//若右边方格为箱子,右边方格接受小人物数据,小人物方
 71
 72                     //格数据变零,右数第二个方格接受箱子方格数据
 73                     {
 74                         int m = map[x, y + 1];
 75                         map[x, y + 1] = t;
 76                         map[x, y] = 0;
 77                         map[x, y + 2] = m;
 78                         y++;
 79
 80
 81                     }
 82                 }
 83                 else if (s.Key.ToString() == "LeftArrow")
 84                 {
 85                     if (map[x, y - 1] == 0)
 86                     {
 87                         map[x, y] = map[x, y - 1];
 88                         map[x, y - 1] = t;
 89                         y--;
 90                     }
 91                     else if (map[x, y - 1] == 2 && map[x, y - 2] != 1)
 92                     {
 93                         int m = map[x, y - 1];
 94                         map[x, y - 1] = t;
 95                         map[x, y] = 0;
 96                         map[x, y - 2] = m;
 97                         y--;
 98
 99                     }
100                 }
101                 else if (s.Key.ToString() == "UpArrow")
102                 {
103                     if (map[x - 1, y] == 0)
104                     {
105                         map[x, y] = map[x - 1, y];
106                         map[x - 1, y] = t;
107                         x--;
108                     }
109                     else if (map[x - 1, y] == 2 && map[x - 2, y] != 1)
110                     {
111                         int m = map[x - 1, y];
112                         map[x - 1, y] = t;
113                         map[x, y] = 0;
114                         map[x - 2, y] = m;
115                         x--;
116
117                     }
118
119
120                 }
121                 else if (s.Key.ToString() == "DownArrow")
122                 {
123                     if (map[x + 1, y] == 0)
124                     {
125                         map[x, y] = map[x + 1, y];
126                         map[x + 1, y] = t;
127                         x++;
128                     }
129                     else if (map[x + 1, y] == 2 && map[x + 2, y] != 1)
130                     {
131                         int m = map[x + 1, y];
132                         map[x + 1, y] = t;
133                         map[x, y] = 0;
134                         map[x + 2, y] = m;
135                         x++;
136
137
138                     }
139
140                 }
141                 Console.Clear();
142
143
144                 if (map[8, 8] == 2)//箱子推到指定位置,跳出循环
145                 {
146                     break;
147                 }
148
149             }
150             Console.WriteLine("恭喜成功!");
151         }
152     }
153 }

				
时间: 2024-10-09 10:16:14

C#整理6——数组的应用的相关文章

php整理(二): 数组

数组: 首先说一下对PHP中的理解,建立一个好的理解模型还是很关键的: 1.PHP中的数组实际上可以理解为键值对,key=>value;而对于key的取值,可以是string/integer;value则是任意数据类型,不仅仅是基本数据类型,引用类型也是可以的,比如说数组; 2.既然key是数据类型,就有相互转换,当定义key是1.0时,将会被转换成1,等等之类的;当然,key也可以是空,也可以重复,只是后面的会覆盖前面的 3.由于是弱语言,里边就有很多松散的样子,比如arr[]="val

javascript学习笔记整理(数组)

数组是一个可以存储一组或是一系列相关数据的容器. 一.为什么要使用数组. a.为了解决大量相关数据的存储和使用的问题. b.模拟真是的世界. 二.如何创建数组 A.通过对象的方式来创建——var a=new Array(); 赋值方式: 1.直接赋值——var a=new Array(元素1,元素2,元素3,元素4,........) var a=new Array(数值)如果只有一个元素,并且这个元素是数值类型的,那么他就是指定数组的长度并且他的值都是undefined var a=new A

8、C#基础整理(数组和冒泡排序)

数组 概念:定义一组同类型的指定个数的变量,索引从0开始 例: int[] shuname = new int[10];//定义一组有10个数据的数组 shuname[0] = 1; Console.WriteLine(shuname[0]);//打印出1 数组与for循环结合的练习: 1.彩票问题:通过数组录入随机生成的红球. //定义一个含有6个数据的数组 int[] hongqiu = new int[6]; Random r = new Random(); //随机生成红球的方法 for

ES6知识点整理之----数组扩展----API新增

Array.from() 用于将两类对象转为真正的数组:类似数组的对象(array-like object)和可遍历(iterable)的对象(包括 ES6 新增的数据结构 Set 和 Map). 只要是部署了 Iterator 接口的数据结构,Array.from都能将其转为数组. 任何有length属性的对象,都可以通过Array.from方法转为数组,而扩展运算符就无法转换. Array.from还可以接受第二个参数,作用类似于数组的map方法,用来对每个元素进行处理,将处理后的值放入返回

php数组以及js数组方法整理

在js中数组非常经常用到,熟练掌握数组的方法能够大大的提高对自己的变成效率,最近解除php,学得非常皮毛,遇到一个问题,自己一直陷入foreach循环如何解决的死循环中.结果一直没能很好的解决,回来讨教了一下同学,更加觉得数组的一些方法很好用,所以有必要整理一下数组的一些方法,希望自己能牢记它们. 一,js数组的操作方法: 参照w3c内容:http://www.jb51.net/w3school/js/jsref_obj_array.htm 以及<javascript权威指南>和<jQu

java:编程比赛中有用的方法整理(一)数组

我曾经参加过几次编程比赛,但是当时用的是c语言,现在学习了java,打算专攻java组,故以此整理. 数组无论在哪里都必不可少. 一.数组的拷贝: 使用Arrays类的copyOf方法: 1.将一个数组中的所有值拷贝到另一个里面: int[] copiedLuckyNumber=Arrays.copyOf(luckyNumbers,luckyNumbers.length); 2.数组的扩容: luckyNumbers=Arrays.copyOf(luckyNumbers,2*luckyNumbe

使用JavaScript&#183;求数组的最大值和最小值

前言  在数组中并没有提供arr.max()和arr.min()这样的方法.那么是不是可以通过别的方式实现类似这样的方法呢?那么今天我们就来整理取出数组中最大值和最小值的一些方法. 法一:其实利用 ECMAScript5的 ...展开运算符可以很简单的解决这个问题 var arr=[2,7,3,10,22,11]; Math.max(...arr); //44 Math.min(...arr); //2  法二 : 对数组进行遍历 对于数组的遍历,有多种不同的方法,下面对各种方法进行比较:Arr

翻阅《数据结构与算法javascript描述》--数组篇

导读: 这篇文章比较长,介绍了数组常见的操作方法以及一些注意事项,最后还有几道经典的练习题(面试题). 数组的定义: JavaScript 中的数组是一种特殊的对象,用来表示偏移量的索引是该对象的属性,索引可能是整数.然而,这些数字索引在内部被转换为字符串类型,这是因为 JavaScript 对象中的属性名必须是字符串.在内部被归类为数组.由于 Array 在 JavaScript 中被当作对象,因此它有许多属性和方法可以在编程时使用. 使用数组: 1.创建数组 使用 [] 操作符 ,var a

Javascript Array 方法整理

Javascript Array 方法整理 Javascript 数组相关方法 说明 大多数其它编程语言不允许改变数组大小,越界访问索引会报错,但是 javascript不会报错,不过不建议直接修改array大小,访问索引时确保不要越界. indexOf 搜索一个指定的元素的位置. slice slice() 就是对应 String 的 substing() 版本,它截取 array 的部分元素,然后返回一个新的 array. push & pop 向数组末尾添加或删除. unshift &