文曲星猜数,纯粹乱写

实现一个链表类
ContractedBlock.gif ExpandedBlockStart.gif 链表类
 1 class linknode
 2     {
 3         public int data;
 4         public linknode next;
 5         public bool deleted;
 6         public linknode()
 7         {
 8             data = -1;
 9             next = null;
10             deleted=false;
11         }
12 
ContractedBlock.gif ExpandedBlockStart.gif 链表类
 1 class linkList
 2     {
 3         public int length;
 4         public linknode next;
 5         public linkList()
 6         {
 7             //初始化
 8             this.length = 0;
 9             next = null;
10         }
11 
12         public void add(int num)
13         {
14             linknode s = new linknode();
15             s.data = num;
16             s.next = next;
17             next = s;
18             //if (length == 0)
19             //{
20             //    next = s;
21             //}
22             //else
23             //{
24             //    linknode p = next;
25             //    while (p.next != null)
26             //    {
27             //        p = p.next;
28             //    }
29             //    p.next = s;
30             //}
31             length++;
32         }
33 
34         public void del(int i)
35         {
36             //删去指定位置元素,从0开始
37             
38                
39                 if (i == 0)
40                 {
41                     next.deleted = true;
42                 }
43                 else
44                 {
45                     linknode p=next;
46                     for (; i > 0; i--)
47                     {
48                         p = p.next;
49                     }
50                     p.deleted = true;
51                 }
52                     length--;
53 
54             
55         }
56 
57         public void display()
58         {
59             Console.WriteLine("输出链表:");
60             if (next == null)
61             {
62                 Console.WriteLine("链表为空!");
63             }
64             else
65             {
66                 linknode s=next;
67                 while(s!=null)
68                 {
69                     if(!s.deleted)
70                     {
71                     Console.Write(s.data);
72                     }
73                     s=s.next;
74                 }
75             }
76         }
77 
78         public void init()
79         {
80             int i = 0;
81             linknode p = next;
82             while (p != null)
83             {
84                 i++;
85                 p.deleted = false;
86                 p = p.next;
87             }
88             length = i;
89         }
90 
91        
92 

实现代码:
ContractedBlock.gif ExpandedBlockStart.gif 主代码
  1 class Program
  2     {
  3         static void Main(string[] args)
  4         {
  5             linkList correctList = new linkList();
  6             linkList answerList = new linkList();
  7             Random rd = new Random();
  8             int n;//表示答案为n阶数字
  9             Console.WriteLine("开始猜谜游戏,请输入您希望玩的游戏阶数:");
 10             n = int.Parse(Console.ReadLine());
 11 
 12             for (int i = 0; i < n; i++)
 13             {
 14                 correctList.add(rd.Next(010));
 15             }
 16             correctList.display();
 17             int tryNum = 6;
 18             while (tryNum > 0)
 19             {
 20                 Console.WriteLine("\n第{0}次尝试:",7-tryNum);
 21                 Console.WriteLine("请输入您要猜的数字,不必隔开;");
 22                 string answerString = Console.ReadLine();
 23                 int num = int.Parse(answerString);
 24                 for (int i = 0; i < n; i++)
 25                 {
 26                     int insertNum = num % 10;
 27                     num = num / 10;
 28                     answerList.add(insertNum);
 29                 }
 30                 int a = 0, b = 0;
 31                 correctList.init();
 32                 compare(correctList, answerList, ref a, ref b);
 33                 Console.Write("{0}A{1}B", a, b);
 34                 if (a == n)
 35                 {
 36                     Console.WriteLine("恭喜您猜对了所有数字!!!");
 37                     break;
 38                 }
 39                 tryNum--;
 40                 if (tryNum == 0)
 41                     Console.WriteLine("很遗憾,您没有猜对数字!请下次尝试!");
 42             }
 43         }
 44 
 45         public static void compare(linkList clist,linkList alist, ref int a, ref int b)
 46         {
 47             //clist为正确答案,alist为回答答案;等下测试引用类型在函数中会不会被修改!!!
 48             a = 0; b = 0;
 49             int n = clist.length;
 50             linknode cnode=clist.next;
 51             linknode anode=alist.next;
 52 
 53             for (int i = 0; i < n; i++)
 54             {
 55                 if (anode.data == cnode.data)
 56                 {
 57                     a++;
 58                     clist.del(i);
 59                     alist.del(i);
 60                     //判断了a的数目
 61                 }
 62                 anode = anode.next;
 63                 cnode = cnode.next;
 64             }
 65             //第二轮遍历,获取B的数目
 66             if (a < n)
 67             {
 68                 linknode p = alist.next;
 69                 while (p != null)
 70                 {
 71 
 72                     if (!p.deleted)
 73                     {
 74                         linknode c = clist.next;
 75                         while (c != null)
 76                         {
 77                             if (!c.deleted)
 78                             {
 79                                 if (p.data == c.data)
 80                                 {
 81                                     b++;
 82                                     p.deleted = true;
 83                                     alist.length--;
 84                                     c.deleted = true;
 85                                     clist.length--;
 86                                     break;
 87                                 }
 88                             }
 89                             c = c.next;
 90                         }
 91                     }
 92                     p = p.next;
 93                 }
 94             }
 95             else
 96             {
 97                 b = 0;
 98             }
 99         }
100 

把生成的随机答案和输入的答案放在链表中,遍历两次,一次统计A的数目,一次统计B的数目!
这个程序,为了通用性,牺牲了很大的性能!
是个教训!

转载于:https://www.cnblogs.com/hanyulcf/archive/2009/08/07/guessNum.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值