现有这样一道题目:
在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-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
一直提取到最后剩下一个数,请问用编程怎么实现,方法不限制
List<int[]> res = new List<int[]>();
while(list.Count()>2)
{
list = list.Where(c => c % 3 < 2);
res.Add(list.ToArray());
}手写代码,没运行不知结果。不过这样算起来,最后结果可能是1或2个int
我忘了是计算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());
}
{
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();
}
}
在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个数就把第三个数去掉,这样一直循环下去
第一次提取的结果,第二次提取后是在第一次提取的结果里面提取,第三次是在第二次提取的结果里面提取,一直这样循环下去,提取到最后的结果,最后剩两个就可以了
如果限定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);
}
}
http://topic.csdn.net/u/20091030/16/92B6CF29-03A6-452F-86AF-F7E572A60855.html
纯数组 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];
}
}