腾讯公司的一道笔试题(Java)
列表中有100个人,从第1个开始数数,当数到7或者7的倍数时,则从列表中将该对象移除,
数到末尾后又开始从第一个循环开始数,直到删除至最后一个人 。
public class delPerson {
public static void main(String[] args)
{
person persons[] = new person[100];
int current_total_count = 100;
//初始化
for(int i = 0; i < 100; i++)
{
persons[i] = new person();
persons[i].SetID(i+1);
persons[i].SetCurrentNumber(i+1);
}
while(current_total_count >= 7)
{
//删除
for (int i = 0; i < 100; i++)
{
if(persons[i].GetID() > 0 && persons[i].GetCurrentNumber() % 7 == 0)
{
persons[i].SetID(0);
current_total_count--;
}
}
//重置CurrentNumber
int currentNumber = 1;
for(int i = 0; i < 100; i++)
{
if(persons[i].GetID() > 0)
{
persons[i].SetCurrentNumber(currentNumber);
currentNumber++;
}
}
}
//测试最后剩下的ID
for(int i = 0; i < 100; i++)
{
if(persons[i].GetID() > 0)
{
System.out.print(persons[i].GetID() + "\n");
}
}
}
}
public class person {
int id;
public int GetID()
{
return this.id;
}
public void SetID(int id)
{
this.id = id;
}
int currentNumber;//当前的数到的数
public int GetCurrentNumber()
{
return this.currentNumber;
}
public void SetCurrentNumber(int currentNumber)
{
this.currentNumber = currentNumber;
}
}