题目一:有一个班采用民主投票方法推选班长,班长候选人共4位,每个人代号分别为1、2、3、4,每名同学填写一张选票,写上同意作为班长的候选人的代号。编写程序,输入每张选票所填的候选人代号,统计每一位候选人所得到的选票数,输出统计结果及最终哪位候选人当选,数字0作为输入终止标识,0、1、2、3、4以外的输入都属于无效选票。求获得选票最多的候选人功能要求用自定义方法实现。
题目二有一群人被困在了一个小岛上,他们只有一个竹排可以逃生,竹排只能坐一个人,于是他们决定通过玩退圈游戏来决定那个人可以坐上竹排逃生。这些人围成了一个圆圈,从1开始每个人顺序编号,他们商定了一个不幸的数字 unlunckyNumber,然后从编号为1的人开始报数,报到unlunckyNumber的倍数就退出游戏,直到最后剩下一个人,这个人就是可以得到竹排的人。编写程序,在main方法中输入玩游戏的人数和不幸的数字unlunckyNumber,自定义Pay方法按游戏规则进行游戏,方法返回赢的人编号。

解决方案 »

  1.   

    1、把选票连续读入成一个字符串,然后调用以下方法判断几号得票最多:
    string GetWinner(string numbers)
    {
    int len=numbers.Length;
    int max=0;
    string result=string.Empty;
    for(int i=1;i<=4;i++)
    {
    numbers=numbers.Replace(i.ToString(),"");
    int temp=len-numbers.Length;
    len-=temp;
    if(temp>max)
    {
    max=temp;
    result=i.ToString();
    }
    }
    return result;
    }
      

  2.   

    2、 string GetLuckyMan(int count,int unlunckyNumber)
    {
    ArrayList list=new ArrayList();
    for(int i=1;i<=count;i++)//游戏者从1到count进行编号
    list.Add(i);
    int unlunckyPos=(unlunckyNumber-1)%list.Count;
    while(list.Count>1)
    {
    list.Remove(list[unlunckyPos]);//下标为unlunckyPos者出局
    unlunckyPos=(unlunckyPos+unlunckyNumber-1)%list.Count;
    }
    return list[0].ToString();
    }
      

  3.   

    第2题是约瑟夫环的问题,最近考的好像比较多,给一个用递归的吧!
    也许用递推更好,不过递归思路似乎更清晰一些!
            static void Main(string[] args)
            {
                //人数
                int amount = 4;
                //编号长度
                int unlunckyNumber = 4;            //程序中的编号从0开始,所以+1,变为从1开始
                int lastOne = solve(amount, unlunckyNumber) + 1;
            }        static int solve(int amount, int unlunckyNumber)
            {
                //如果只剩下1个人,那么编号是0,(编号从0开始是为了取%比较方便)
                if (amount == 0)
                    return 1;            //转化为amount-1人的问题,剩下的人编号+unlunckyNumber
                return (solve(amount - 1, unlunckyNumber) + unlunckyNumber) % amount;
            }