C#(二):数组

  • 声明数组

数据类型[] 数组名;

  • 初始化数组

数组名 = new 数据类型[元素总数];

例:int[] array = new int[5];

  • 赋值

array[0] = 1;

    private void Array()
    {
        //声明
        int[] array0;
        //初始化
        array0 = new int[3];
        //赋值
        array0[0] = 0;
        array0[1] = 1;
        array0[2] = 2;


        //数组其他写法
        //1.初始化 + 赋值
        string[] array01 = new string[2] { "a", "b" };
        //string[] array01 = new string[] { "a", "b" };

        //2.声明 + 赋值
        int[] array02 = { 1, 2, 3, 4 };

    }
  • 练习:彩票生成器

(1)玩法类型及承销

双色球是一种大盘玩法游戏,属乐透型彩票范畴,由中国福利彩票发行管理中心统一组织发行,在全国范围内销售。

(2)玩法说明

双色球投注区分为红球号码区和蓝球号码区,红球号码范围为01~33,蓝球号码范围为01~16。双色球每期从33个红球中开出6个号码,从16个蓝球中开出1个号码作为中奖号码,双色球玩法即是竞猜开奖号码的6个红球号码和1个蓝球号码,顺序不限 
 

(3)设奖及中奖 

奖级

中奖条件

中奖说明

单注奖金

单注赔率

红球

蓝球

一等奖

●●●●●●

中6+1

    当奖池资金低于1亿元时,奖金总额为当期高等奖奖金的75%与奖池中累积的奖金之和,单注奖金按注均分,单注最高限额封顶500万元。
    当奖池资金高于1亿元(含)时,奖金总额包括两部分,一部分为当期高等奖奖金的55%与奖池中累积的奖金之和,单注奖金按注均分,单注最高限额封顶500万元;另一部分为当期高等奖奖金的20%,单注奖金按注均分,单注最高限额封顶500万元。

--

二等奖

●●●●●●

 

中6+0

当期高等奖奖金的25%

 

三等奖

●●●●●

中5+1

单注奖金额固定为3000元

1:1500

四等奖

●●●●●

 

中5+0

单注奖金额固定为200元

1:100

●●●●

中4+1

五等奖

●●●●

 

中4+0

单注奖金额固定为10元

1:5

●●●

中3+1

六等奖

●●

中2+1

单注奖金额固定为5元

1:2.5

中1+1

 

中0+1

        /* 彩票生成器:
         * 红球:1--33  6个  不能重复
         * 蓝球:1--16  1个
         * (1) 在控制台中购买彩票的方法int[7]
         * 请输入第1个红球号码
         * "号码不能超过1--33" "当前号码已存在"
         * 
         * (2) 随机产生一注彩票的方法int[7]
         * random.Next(1,34);
         * 要求:红球号码不能重复,且按照从小到大排序
         * 
         * (3) 两注彩票比较的方法,返回中奖等级
         * 先计算红球、篮球中奖数量
         * 
         * 在控制台程序Main中测试
         */

    //买的彩票
    private static int[] BuyTicket()
    {
        int[] ticket = new int[7];
        //前6个红球
        for (int i = 0; i < 6;)
        {
            Console.WriteLine("请输入第{0}个红球号码:", i + 1);
            int redNumber = int.Parse(Console.ReadLine());
            if (redNumber < 1 || redNumber > 33)
                Console.WriteLine("购买的号码超过范围");
            else if (Array.IndexOf(ticket, redNumber) >= 0)
                Console.WriteLine("号码已经存在");
            else
                ticket[i++] = redNumber;
        }
        //第7个蓝球
        while (true)
        {
            Console.WriteLine("请输入蓝球号码:");
            int blueNumber = int.Parse(Console.ReadLine());
            if (blueNumber >= 1 && blueNumber <= 16)
            {
                ticket[6] = blueNumber;
                break;
            }
            else
            {
                Console.WriteLine("号码超过范围");
            }
        }
        return ticket;
    }

    //随机生成的彩票
    static Random random = new Random();
    private static int[] CreateRandomTicket()
    {
        int[] ticket = new int[7];
        for (int i = 0; i < 6;)
        {
            int redNumber = random.Next(1, 34);
            //如果redNumber在数组中不存在
            if (Array.IndexOf(ticket, redNumber) < 0)
                ticket[i++] = redNumber;
        }
        ticket[6] = random.Next(1, 17);
        //红球号码排序
        Array.Sort(ticket,0,6);
        return ticket;
    }

    //比较彩票,判断几等奖
    private static int TicketEquals(int[] myTicket, int[] randomTicket)
    {
        //计算红球、蓝球中奖数量
        int blueCount = myTicket[6] == randomTicket[6] ? 1 : 0;
        int redCount = 0;
        //我的第i个红球号码,在随机彩票中的红球号码中是否存在
        for (int i = 0; i < 6; i++)
        {
            if (Array.IndexOf(randomTicket, myTicket[i], 0, 6) >= 0)
            {
                redCount++;
            }
        }
        int level;
        if (blueCount + redCount == 7)
            level = 1;
        else if (redCount == 6)
            level = 2;
        else if (redCount + blueCount == 6)
            level = 3;
        else if (redCount + blueCount == 5)
            level = 4;
        else if (redCount + blueCount == 4)
            level = 5;
        else if (blueCount == 1)
            level = 6;
        else
            level = 0;

        return level;
    }

    //调用测试
    private  static void Main()
    {
        int[] myTicket = BuyTicket();
        int level;
        int count = 0;
        do
        {
            count++;
            int[] randomTicket = CreateRandomTicket();

            level = TicketEquals(myTicket, randomTicket);
            if (level != 0)
            {
                Console.WriteLine("恭喜,{0}等奖。累计消费:{1:c}元", level, count * 2);
            }
        } while (level != 1);
        
    }
  • 交错数组

 交错数组:每个元素都为一维数组,分布通常想象为“不规则的表格”

            int[][] array01;//null
            //创建具有4个元素的交错数组
            array01 = new int[4][];
            //创建一维数组 赋值给 交错数组的第一个元素
            array01[0] = new int[3];
            array01[1] = new int[5];
            array01[2] = new int[4];
            array01[3] = new int[1];
            //将数据1赋值给交错数组的第一个元素 的 第一个元素
            array01[0][0] = 1;
            array01[1][2] = 2;
            array01[1][4] = 3;
            array01[2][1] = 4;
            array01[2][3] = 5;

            //遍历交错数组
            foreach (int[] array in array01)
            {
                foreach (int element in array)
                {
                    Console.Write(element + "\t");
                }
                Console.WriteLine();
            }

            //array01.Length 交错数组元素数(理解为:行数)
            for (int r = 0; r < array01.Length; r++)
            {
                //array01[r].Length 交错数组某个元素的元素数(理解为:列数)
                for (int c = 0; c < array01[r].Length; c++)
                {
                    Console.Write(array01[r][c] + "\t");
                }
                Console.WriteLine();
            }
            Console.ReadLine();

结果为:

  • params 参数数组
        //params 参数数组
        //对于方法内部而言:就是个普通数组
        //对于方法外部(调用者)而言:
        //1.可以传递数组
        //2.传递一租数据类型相同的变量集合
        //3.可以不传递参数
        //作用:简化调用者调用方法的代码

        private static int Add(params int[] arr)
        {
            int sum = 0;
            foreach (var item in arr)
            {
                sum += item;
            }
            return sum;
        }

        //调用时:
        // int result01 = Add(new int[]{1,2,3,4});
        // int resule02 = Add(1,2,3,4);
        // int result03 = Add();

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值