美团2016招聘笔试:奇数位丢弃
Problem Description
对于一个由0…n的所有数按升序组成的序列,我们要进行一些筛选,每次我们取当前所有数字中从小到大的第奇数位个的数,并将其丢弃。重复这一过程直到最后剩下一个数。请求出最后剩下的数字。输入描述:每组数据一行一个数字,为题目中的n(n小于等于1000)。输出描述:一行输出最后剩下的数字。
输入例子:
500
输出例子:
255
import java.util.ArrayList;
import java.util.Scanner;
class Main
{
public static void main(String[] args) {
Scanner scan=new Scanner(System.in);
int n=scan.nextInt();
ArrayList<String> list1=new ArrayList<String>();
for(int i=0;i<=n;i++)
{
list1.add(String.valueOf(i));
}
ArrayList<String> list2=new ArrayList<String>(list1);
while(list1.size()!=1)
{
list1.clear();
for(int i=1;i<=list2.size();i++)
{
if(i%2==0)list1.add(list2.get(i-1));
}
list2.clear();
list2=new ArrayList<String>(list1);
}
System.out.println(list1.get(0));
scan.close();
}
}