mn83915145
mn83915145
2010-06-04 00:58

一个算法笔试题,求解答

已采纳

一个100位的虚列数,从第1位开始读取,当读到第7位的时候,就删除第7位。当读到最后一位的时候,就跳到第1位重新开始读,按照这样,直到所有的数全部删光。

今天碰到的一个笔试题,题目的大致意思就是这样。 求各路神仙给我解答。 最好每句都能带上注释。小弟在这先行谢过了。。。

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享
  • 邀请回答

9条回答

  • zwei1021 zwei1021 11年前

    [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]

    删除顺序代码

    点赞 评论 复制链接分享
  • r6csh r6csh 11年前

    指的是约瑟夫问题吗?

    点赞 评论 复制链接分享
  • zwei1021 zwei1021 11年前

    是可以全部删除的

    第一轮删除 除7余0的数

    第二轮删除 除7余5的数
    第三轮删除 除7余3的数
    第四轮删除 除7余1的数
    第五轮删除 除7余6的数
    第六轮删除 除7余4的数
    第七轮删除 除7余2的数

    全部删除完毕

    点赞 评论 复制链接分享
  • haha662 haha662 11年前

    我晕,100个数,只有前面6个不会被删除的撒,所以最后剩下的只有前面6位,如果你要知道最后的数列结果的话,那就是原数列的前6位,如果你是想要知道每次是哪个数被删除,那就是顺序下来的8-100位了,还用什么for循环呀?一想就知道了

    点赞 评论 复制链接分享
  • iteye_12966 iteye_12966 11年前

    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;
        }
    }
    

    }

    点赞 评论 复制链接分享
  • stang003 stang003 11年前

    [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]

    点赞 评论 复制链接分享
  • stang003 stang003 11年前

    虚列数是什么意思啊,总不能像楼上那样就把第七位以后的都删了,
    最后就剩下前六位,还要写什么循环啊

    点赞 评论 复制链接分享
  • xjauzcy xjauzcy 11年前

    到最后数据应该还有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]

    点赞 评论 复制链接分享
  • badonly badonly 11年前

    FIFO的数据队列的运用!

    很多面试题是都与数据结构相关的

    点赞 评论 复制链接分享

相关推荐