一个100位的虚列数,从第1位开始读取,当读到第7位的时候,就删除第7位。当读到最后一位的时候,就跳到第1位重新开始读,按照这样,直到所有的数全部删光。
今天碰到的一个笔试题,题目的大致意思就是这样。 求各路神仙给我解答。 最好每句都能带上注释。小弟在这先行谢过了。。。
[code="java"] public static void main(String[] args) throws Exception {
List data = new ArrayList();
for(int i=1;i<=100;i++){
data.add(i);
}
int count = 0;
for(int i=0;i0;i++){
count++;
count = count%7;
if(count==0){
System.out.println("删除:"+data.get(i));
data.remove(i);
i--;
}
if(i>=data.size()-1){
i = -1;
}
}
}[/code]
删除顺序代码
FIFO的数据队列的运用!
很多面试题是都与数据结构相关的
到最后数据应该还有6条吧,不应该全部删光吧。我写了一个类似的例子,你可以依次类推。
[code="java"]import java.util.ArrayList;
import java.util.List;
/**
@author 碧月幽灵
*
*/
public class Test {
/**
@param args
*/
public static void main(String[] args) {
List al=new ArrayList();//创建一个List
for(int i=1;i<=100;i++){
al.add(i);//将1到100加入到List
}
System.out.println(al);
while(al.size()>6){//当List的长度大于6时执行下列循环
for(int i=0;i<al.size();i++){
System.out.println(al);
al.remove(6);//删除第七个元素,长度也相应减1
}
}
System.out.println(al);
}
}[/code]
虚列数是什么意思啊,总不能像楼上那样就把第七位以后的都删了,
最后就剩下前六位,还要写什么循环啊
[code="java"]
public class Test {
//current是当前读取的位数,初始值设为-1
private static int current = -1;
//rowsPerOnce是每次读取的位数,如题要求设为7
private static int rowsPerOnce = 7;
//list为存储空间
private static List list = new ArrayList();
//可用初始化方法代替
static {
for (int i = 0; i < 100; i++) {
list.add(i);
}
}
//读取下一个值
public static Integer next() {
int size = list.size();
//判断current如果越界,则归零
current = (current + 1 >= size) ? 0 : current + 1;
return list.get(current);
}
//读取方法
public static void read() {
//读取的条数,每满一次归零
int rows = 0;
//具体读取操作
while (list.size() > 0) {
System.out.print(next() + "\t");
rows++;
//把第rowsPerOnce位删除,rows归零
if (rows % rowsPerOnce == 0) {
rows = 0;
list.remove(current);
System.out.println();
}
}
}
//主方法,调用读取方法
public static void main(String[] args) {
read();
}
}
[/code]
namespace ConsoleApplication3
{
class Program
{
static void Main(string[] args)
{
ArrayList arlist = new ArrayList(100);
for (var i = 0; i < 100; i++)
{
arlist.Add(i);
}
foreach (var a in Meth(arlist, 7))
{
Console.WriteLine(a);
}
}
public static ArrayList Meth(ArrayList arr, int index)
{
if (arr.Count < 7) return arr;
else
{
if (arr.Count == index)
{
arr.RemoveAt(index - 1);
}
else
{
arr.RemoveAt(index);
Meth(arr, index);
}
}
return arr;
}
}
}
我晕,100个数,只有前面6个不会被删除的撒,所以最后剩下的只有前面6位,如果你要知道最后的数列结果的话,那就是原数列的前6位,如果你是想要知道每次是哪个数被删除,那就是顺序下来的8-100位了,还用什么for循环呀?一想就知道了
是可以全部删除的
第一轮删除 除7余0的数
第二轮删除 除7余5的数
第三轮删除 除7余3的数
第四轮删除 除7余1的数
第五轮删除 除7余6的数
第六轮删除 除7余4的数
第七轮删除 除7余2的数
全部删除完毕
指的是约瑟夫问题吗?