现有这样一道题目:
在1-50当中,如:1,2,3,4,5,6,7,8,9,10,11,12,13,14,15.......50,
第一次提取的结果为:1,2,4,5,7,8,10,11,13,14......50
第二次提取的结果为:1,2,5,7,10,11,14....50
一直提取到最后剩下一个数,请问用编程怎么实现,方法不限制

解决方案 »

  1.   

    所有数添加到ArrayList,每回去掉3的倍数的元素,直到最后
      

  2.   

        var list = Enumerable.Range(1, 50);
                List<int[]> res = new List<int[]>();
              while(list.Count()>2)
              {
                   list = list.Where(c => c % 3 < 2);
                   res.Add(list.ToArray());
              }手写代码,没运行不知结果。不过这样算起来,最后结果可能是1或2个int
              
      

  3.   

    这个在大一好像是大一就写过了,C语言书里的题目。C、JAVA都很容易写出来,只要理解了的话。
      

  4.   

    哦,上面写的有点问题
    我忘了是计算index,而不是原本的值了改下吧
      var list = Enumerable.Range(1, 50);
                List<int[]> res = new List<int[]>();
              while(list.Count()>2)
              {
                  int index=1;
                var templist = list.Select(c => new { num = c, index = index++ }).Where(c => c.index % 3 > 0);
                  list=templist.Select(c=>c.num);
                  res.Add(list.ToArray());
              }
              
      

  5.   

    留下1和2后,如何处理?public partial class Form1 : Form
        {
            ArrayList arr = new ArrayList();
            StringBuilder sb = new StringBuilder();
            public Form1()
            {
                InitializeComponent();
                sb.Length = 0;
                for (int i = 0; i < 50; i++)
                {
                    arr.Add(i+1);
                    sb.Append(arr[i].ToString()+",");
                }
                sb.Length = sb.Length - 1;
                textBox1.Text=sb.ToString(); 
            }        private void button1_Click(object sender, EventArgs e)
            {
                int CountN = arr.Count;
                sb.Length = 0;
                for (int i = CountN; i >= 1; i--)
                {
                    if (i / 3 == i * 1.0 / 3)
                    {
                        arr.RemoveAt(i - 1);
                    }
                }
                CountN = arr.Count;
                for (int i = 0; i < CountN; i++)
                {
                    sb.Append(arr[i].ToString() + ",");
                }
                sb.Length = sb.Length - 1;
                textBox1.Text = sb.ToString();
            }
        }
      

  6.   

    现有这样一道题目:
    在1-50当中,如:1,2,3,4,5,6,7,8,9,10,11,12,13,14,15.......50,
    第一次提取的结果为:1,2,4,5,7,8,10,11,13,14......50
    第二次提取的结果为:1,2,5,7,10,11,14....50
    一直提取到最后剩下一个数,请问用编程怎么实现,方法不限制
    (最好是C#或者Java来实现)上面的题目我描述的可能不是很详细,那我在补充补充
    就是说每隔2个数就把第三个数去掉,这样一直循环下去
    第一次提取的结果,第二次提取后是在第一次提取的结果里面提取,第三次是在第二次提取的结果里面提取,一直这样循环下去,提取到最后的结果,最后剩两个就可以了
      

  7.   


    如果限定50个数的话,那最后的结果不用任何程序执行,一看就知道是1和2,因为不管怎么删除,永远是从2后面的那个数开始删,最后结果只能是1和2.不过还是给你个递归的C#程序吧 ArrayList splitString(ArrayList list) {
    if(list.Count < 3)
    return list;
    else {
    for(int i=0;i<list.Count;i++) {
    if ((i+1)%3==0)
    list.RemoveAt(i);
    }
    return splitString(list);
    }
    }
      

  8.   

    看下这个,有我的回复
    http://topic.csdn.net/u/20091030/16/92B6CF29-03A6-452F-86AF-F7E572A60855.html
      

  9.   

    good good study,day day up
      

  10.   

    路过的 
    纯数组 pia一个~~~
    class Program
        {
            static void Main(string[] args)
            {
                int[] num = new int[50];
                //初始化数组
                for(int i=0;i<50;i++)
                {
                    num[i] = i + 1;
                }
                Console.Write("最后两个数是:{0}", display(num));
                Console.ReadKey();
            }
            static string display(int []num)
            {
                string result = "";
                int skt = 0;
                while (num[2]!=num[3])
                {
                    string str = "";
                    int count = 0;
                    //此循环用于将淘汰掉的数用-1标志
                    for (int i = 0; i < num.Length-skt; i++)
                    {
                        if (i != 0 && (i + 1) % 3 == 0)
                        {
                            num[i] = -1;
                            count++;
                        }
                    }
                    skt = skt + count;
                    //处理标志-1的数组元素
                    for (int j = 0; j < num.Length - skt; j++)
                    {
                        if (num[j] == -1)
                        {
                            for (int m=j; m < num.Length-1; m++)
                            {
                                num[m] = num[m + 1];
                            }
                        }
                        str+=num[j]+" ";
                    }
                    Console.Write("一次循环结束,剩下{0}个数\n", num.Length - skt);
                    Console.Write("该次循环后的数组为:{0}\n", str);
                }
                return result = "值为" + num[0] + num[1];   
            }
        }