1.删除数组中的元素
接收要删除的元素的索引,将该索引后使用元素向前移一位,即覆盖该元素
2.数组中元素反转
1.从第一个元素开始,和最后一个元素交换。
2.然后把第二个元素和倒数第二个元素交换,这样只需要交换数组名.length/2次就可以了
3.定义一个中间变量实现两数交换
如: char temp = arri;
arri = arrarr.Length - 1 - i;
arrarr.Length - 1 - i = temp;
数据类型根据数组中存储类型进行改变
4.冒泡排序:
- 排序介绍
排序主要是针对数字类型进行的。
常见的排序方式:升序排序、降序排序。
- 升序排序:从小到大排列。
- 降序排序:从大到小排列。
排序算法:冒泡排序、快速排序、插入排序、选择排序等。每一种排序实现的方式又有所不同,但是最终的结果都是一样的。区别在于时间和空间的不同。
2. 冒泡排序介绍
冒泡排序实现思路和现实生活中水中吐泡泡一样。在水中吐泡泡以后,会逐渐的往上升。
3. 冒泡排序规则
从脚标0的元素开始,每两个元素依次进行比较。
- 前一个元素大于后一个元素,交换位置。
- 前一个元素不大于后一个元素,不交换位置。
假设对一个数组中的元素进行升序排序:

3.1 第一轮比较
第一次比较,脚标0和脚标1,5和2,5大于2,交换元素的位置。
第二次比较,脚标1和脚标2,5和4比较,5大于4, 交换元素的位置。
第三次比较,脚标2和脚标3,5和3比较,5大于3,交换元素位置。
第四次比较,脚标3和脚标4,5和1比较,5大于1,交换元素的位置。
总结:如果长度为Length的数组,只需要比较4次。
3.2 第二轮比较
第一次0脚标和1脚标比较,2和4比较,2不大于4,不交换位置。
第二次脚标1和脚标2比较,4和3比较,4大于3,交换元素的位置。
第三次脚标2和脚标3比较,4和1比较,4大于1,交换元素的位置。
总结:本轮比较次数为3次。
3.3 第三轮比较
第一次脚标0和脚标1比较,2和3比较,2不大于3,不交换位置。
第二次脚标1和脚标2比较,3和1比较,3大于1,交换元素的位置。
总结:本轮比较次数为2次。
3.4 第四轮比较
第一次脚标0和脚标1比较,2和1比较,2大于1,交换元素的位置。
总结:本轮比较次数为1次。
4. 冒泡排序总结
4.1 比较的轮数
每轮比较都会把本轮比较的最大(小)值移动到最后面,最后剩下的为最大(最小),比较的轮数为:数组长度-1轮。
4.2 每轮比较次数
假设当前是第i轮(i从0开始的值):
1.第一轮i = 0 ,需比较(length-1 ) - 0 次。(之所以减1,因为最后一次比较的是最后两个,也就是说比较到倒数第二个就可以了)。
-
第二轮i = 1,需要比较(length-1) - 1 次。因为本轮最后1个值不需要比较了。
-
第三轮i = 2,需要比较(length-1)- 2 次。因为本轮最后2个值不需要比较了。
-
第四轮i = 3,需要比较(length-1)- 3 次。因为本轮最后3个值不需要比较了。只需要比较1次。
-
当第i轮比较时,比较的次数为length-1-i。
5.多维数组
多维数组的本质为数组中的每个元素依然为数组。
创建多维数组
//2 -> 第一维长度
//3 -> 第二维长度
int, ints = new int2, 3;
6.双色球案列
福彩双色球要求如下:
福彩双色球由6位1到33的整数(红球),加1位1到16的整数(蓝球)组成。
new int5, 8 //最多购买5组,每一组中有6个红球号码 1个蓝球号码 1个倍数

开奖过程由一台机器完成。里面装有33个红球,从33个红球里面随机出6个中奖号码,产生的顺序并不是从小打到的。每个球的数字都是不重复的。
最后从16个蓝球里面随机产生一个蓝球中奖号码。

规则中最难的就是计算一等奖,因为一等奖需要看奖金池总数,还和累计奖金有关系。
在这里我们设定:一等奖固定500万元,二等奖固定5万元 。

实现代码如下:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace 福彩双色球系统
{
internal class Program
{
static void Main(string\[\] args)
{
Console.WriteLine("------------------------");
Console.WriteLine("欢迎使用福彩双色球系统!");
Console.WriteLine("------------------------");
int, redBalls = new int5, 6;
int, BlueBalls = new int5, 1;
int, beiShu = new int5, 1;
int\[\] winNumber = new int7;
Random rnd = new Random();
bool\[\] states1 = new bool34;
bool\[\] states = new bool34;
int totalNumber1 = 0;
bool b = true, b1 = true, b2 = true;
do
{
Console.WriteLine("请选择你想进行的操作:");
Console.WriteLine("1.购买彩票");
Console.WriteLine("2.查看购买彩票");
Console.WriteLine("3.开奖");
Console.WriteLine("4.查看中奖情况");
Console.WriteLine("5.查看当期开奖号码");
Console.WriteLine("6.退出系统");
string input = Console.ReadLine();
switch (input)
{
case "1":
{
if(b2 == false)
{
Console.WriteLine("本期已经开奖,不能再购买号码!");
break;
}
while (b1)
{
for (int i = 0; i < states.Length; i++)
{
statesi = true;
}
Console.WriteLine($"这是您购买的第{totalNumber1 + 1}组号码");
for (int i = 0; i < 6; i++)
{
Console.WriteLine($"请输入您要购买的第{i + 1}个红球号码(1-33):");
int redBallnumber = Convert.ToInt32(Console.ReadLine());
while (redBallnumber < 1 || redBallnumber > 33)
{
Console.ForegroundColor = ConsoleColor.Red;
Console.WriteLine("红球号码必须是1-33之间的整数!");
Console.WriteLine("请重新输入!");
Console.ResetColor();
redBallnumber = Convert.ToInt32(Console.ReadLine());
}
if (states[redBallnumber] == true)
{
redBalls[totalNumber1, i] = redBallnumber;
}
else
{
Console.ForegroundColor = ConsoleColor.Red;
Console.WriteLine("该号码您之前已经选择过了!");
Console.WriteLine("请重新输入!");
Console.ResetColor();
i--;
continue;
}
states[redBallnumber] = false;
}
for (int i = 0; i < 6; i++)
{
for (int j = i + 1; j < 6; j++)
{
if (redBalls[totalNumber1, i] > redBalls[totalNumber1, j])
{
int temp = redBalls[totalNumber1, i];
redBalls[totalNumber1, i] = redBalls[totalNumber1, j];
redBalls[totalNumber1, j] = temp;
}
}
}
Console.WriteLine("请输入您要购买的蓝球号码(1-16):");
BlueBalls[totalNumber1, 0] = Convert.ToInt32(Console.ReadLine());
while (BlueBalls[totalNumber1, 0] < 1 || BlueBalls[totalNumber1, 0] > 16)
{
Console.WriteLine("蓝球号码必须是1-16之间的整数!");
Console.WriteLine("请重新输入!");
BlueBalls[totalNumber1, 0] = Convert.ToInt32(Console.ReadLine());
}
Console.WriteLine("请输入您要购买的倍数:");
beiShu[totalNumber1, 0] = Convert.ToInt32(Console.ReadLine());
while (beiShu[totalNumber1, 0] < 1 || beiShu[totalNumber1, 0] > 99)
{
Console.WriteLine("倍数必须是1-99之间的整数!");
Console.WriteLine("请重新输入!");
beiShu[totalNumber1, 0] = Convert.ToInt32(Console.ReadLine());
}
Console.WriteLine("是否继续购买下一组号码?(y/n)");
string continuePurchase = Console.ReadLine();
if (continuePurchase == "y" )
{
totalNumber1++;
if (totalNumber1 >= 5)
{
Console.WriteLine("您已经购买了5组号码,不能再购买了!");
b1 = false;
continue;
}
}
else
{
b1 = false;
continue;
}
}
}
break;
case "2":
// 查看购买彩票逻辑
{
Console.ForegroundColor = ConsoleColor.Blue;
Console.WriteLine($"您这张彩票中一共购买了{totalNumber1 + 1}组号码");
Console.WriteLine("购买号码如下");
for (int i = 0; i <= totalNumber1; i++)
{
Console.Write($"第{i + 1}组号码:");
for (int j = 0; j < 6; j++)
{
Console.Write($"{redBalls[i, j]} ");
}
Console.Write($" - {BlueBalls[i, 0]} ");
Console.WriteLine($" * {beiShu[i, 0]}");
}
Console.ResetColor();
}
break;
case "3":
// 开奖逻辑
{
if (redBalls[0, 0] == 0)
{
Console.ForegroundColor = ConsoleColor.Red;
Console.WriteLine("您还没有购买号码,请先购买号码!");
Console.ResetColor();
break;
}
while (b2)
{
for (int i = 0; i < states.Length; i++)
{
states1[i] = true;
}
for (int i = 0; i < 6; i++)
{
int num = rnd.Next(1, 34);
while (states1[num] == false)
{
num = rnd.Next(1, 34);
}
winNumber[i] = num;
states1[num] = false;
}
for (int i = 0; i < 6; i++)
{
for (int j = i + 1; j < 6; j++)
{
if (winNumber[i] > winNumber [j])
{
int temp = winNumber[i];
winNumber[i] = winNumber[ j];
winNumber[j] = temp;
}
}
}
winNumber[6] = rnd.Next(1, 17);
b2 = false;
Console.ForegroundColor = ConsoleColor.Green;
Console.WriteLine("开奖成功!");
Console.ResetColor();
}
}
break;
case "4":
// 查看中奖情况逻辑
{
if (redBalls[0,0] == 0)
{
Console.ForegroundColor = ConsoleColor.Red;
Console.WriteLine("您还没有购买号码,请先购买号码!");
Console.ResetColor();
break;
}
if(b2 == true)
{
Console.ForegroundColor = ConsoleColor.Red;
Console.WriteLine("还没有开奖,无法查看中奖情况!");
Console.ResetColor();
break;
}
int cnt = 0;
for (int i = 0; i <= totalNumber1; i++)
{
int sumNumber = 0;
int redCount = 0;
int blueCount = 0;
for (int j = 0; j < 6; j++)
{
for (int k = 0; k < 6; k++)
{
if (redBalls[i, j] == winNumber[k])
{
redCount++;
}
}
}
if (BlueBalls[i, 0] == winNumber[6])
{
blueCount++;
}
Console.ForegroundColor = ConsoleColor.Blue;
Console.WriteLine($"第{i + 1}组号码中奖情况:红球中{redCount}个,蓝球中{blueCount}个");
Console.ResetColor();
sumNumber = redCount + blueCount;
Console.ForegroundColor = ConsoleColor.Red;
switch (sumNumber)
{
case 7:
Console.WriteLine($"恭喜您第{i + 1}组中了一等奖!5000000元!");
cnt++;
break;
case 6:
if (blueCount == 0)
{
Console.WriteLine($"恭喜您第{i + 1}组中了二等奖!50000元!");
cnt++;
}
else
{
Console.WriteLine($"恭喜您第{i + 1}组中了三等奖!3000元!");
cnt++;
}
break;
case 5:
Console.WriteLine($"恭喜您第{i + 1}组中了四等奖!200元!");
cnt++;
break;
case 4:
Console.WriteLine($"恭喜您第{i + 1}组中了五等奖!10元!");
cnt++;
break;
case 3:
Console.WriteLine($"恭喜您第{i + 1}组中了六等奖!5元!");
cnt++;
break;
case 2:
Console.WriteLine($"恭喜您第{i + 1}组中了六等奖!5元!");
cnt++;
break;
case 1:
Console.WriteLine($"恭喜您第{i + 1}组中了六等奖!5元!");
cnt++;
break;
default:
Console.WriteLine($"很遗憾,您第{i + 1}组没有中奖!");
break;
}
}
Console.WriteLine("您共中奖{0}次", cnt);
Console.ResetColor();
}
break;
case "5":
// 查看当期开奖号码
{
if(b2 == true)
{
Console.ForegroundColor = ConsoleColor.Red;
Console.WriteLine("还没有开奖,无法查看当期开奖号码!");
Console.ResetColor();
break;
}
Console.ForegroundColor = ConsoleColor.Blue;
Console.WriteLine("当期开奖号码为:");
for (int i = 0; i < 6; i++)
{
Console.Write($"{winNumber[i]} ");
}
Console.WriteLine("\n您购买的号码为:");
for(int i = 0;i <= totalNumber1; i++)
{
Console.Write($"第{i + 1}组号码:");
for (int j = 0; j < 6; j++)
{
Console.Write($"{redBalls[i, j]} ");
}
Console.Write($" + {BlueBalls[i, 0]} \n");
}
Console.ResetColor();
}
break;
case "6":
// 退出系统逻辑
{
Console.ForegroundColor = ConsoleColor.Red;
Console.WriteLine("感谢使用福彩双色球系统!");
Console.WriteLine("欢迎您的再次使用!");
Console.ResetColor();
b = false;
break;
}
default:
Console.ForegroundColor = ConsoleColor.Red;
Console.WriteLine("无效输入,请重新选择");
Console.ResetColor();
break;
}
} while (b);
Console.ReadKey();
}
}
}
代码实现界面如下:

注意:由于使用的是用Int进行接收,所以输入的只能是数字,输入字符等会直接报错,本人较懒就不做修改了,大家可以自行优化;
