今天去了趟北京什么研究所  面试java工程师,给我来了两个算法题,当时就把哥们给制住了,
晚上回来以后充电百度了一下 全是C语言代码解法,我擦,C我不懂啊,有么有大哥用java思路说说算法,给出代码那就更好了N0.1加100完全平方数,再加168还是完全平方数,说出算法,N0.2
N个人围一圈,数到m个人出列,然后继续接着往下数,写出算法和流程图、

解决方案 »

  1.   


    import java.util.ArrayList;
    import java.util.List;
    public class No2 {
    int number;
    int m;

    public static void doTT(int number,int m){
    List<Integer> ins = new ArrayList<Integer>();
    for(int i =0;i<number;i++){
    ins.add(i);
    }
    int index = 0;//被T的人在列表中下标
    for(int i =0;i<number;i++){
    //从0开始数数
    index = (index+m)%ins.size();
    System.out.print(ins.remove(index)+" ");
    }
    }

    public static void main(String args[]){
    doTT(10,4);
    }
    }
    4 9 5 1 8 7 0 3 6 2 
    //什么环我早忘光了,呵呵
      

  2.   

    NO:2参考实例
    //filename:love_you.java
    public class love_you
    {
       public static void main(String[] args)
       {
         final int N=13,S=3,M=5;
         int i=S-1,j,k=N,g=1;
         int[] a=new int[N];
         for(int h=1;h<=N;h++)
         a[h-1]=h;
         System.out.println("\n出圈顺序为");
         do
         {
          i=i+(M-1);
          while(i>=k)
          i=i-k;
          System.out.print("    "+a[i]);
         for(j=i;j<k-1;j++)
          a[j]=a[j+1];
          k--;
          g++;
          }while(g<=N);
       }
    }
      

  3.   

    偶是新手,先来抛个砖。
    No1.
    x+100=a^2,x+100+168=b^2   推出  a^2+168=b^2  即  2*2*2*3*7=(b-a)*(b+a);
    针对这个组合编个程,求出可能的a,b ,最后求出x
    No2.
    ArrayList<Person> Persons=new ArrayList<Person>[N];
    int n=0;
    while(Persons.size()!=1)
    {
       if((n+1)%M!=0) continue;
       System.out.println(Persons.get(n).getId()+":I'm out.");//Person 类里定义Id属性,getId方法
       Persons.remove(n);
       n++;
       if(n>N-1) n=n-N+1;
    }
      

  4.   

    NO1. 另附:168<13*13,且b-a<b+a.所以b-a<13.  所以b-a只能去2,3,4,6,7,8
      

  5.   


    在抛个砖手算就出来了
    public class pingfangshu {

    public static void main(String args[]){
    int x = 0;
    int y2 = 0;
    int y1 = 0;
    // x+100==y1*y1;
    // x+168 == y2*y2;
    // (y2-y1)(y2+y1)== 68;
    // (1,68);
    // (2,34);
    // (4,17);
    // (17,4);
    // (34,2);
    // (68,1);
    // 68%2=34%2=17;
    // y2-y1 = 2;//y2必须为整数,所以其他情况排除  
    // y2+y1 = 34;
    y2 = 18;y1=16|-16;
    x = 96;
    }
    }
      

  6.   

    import java.util.ArrayList;
    import java.util.LinkedList;
    public class Test {
    public static void main(String[] args) {

    getNum(5);
    }


    public static void getNum(int m){
    ArrayList list1 = new ArrayList();//原始数组{0,1,2,3,4}
    ArrayList list2 = new ArrayList(); //输出数组

    for(int j = 0;j < 5;j++){
    list1.add(j);
    }

    System.out.print("原始数组:");
    for(int j = 0;j < list1.size();j++){
    System.out.print(list1.get(j) + ",");
    }

    Object obj = null;
    int k = 0;

    //while循环原理:如果传进来的参数m小于原始数组list1的长度,就直接移除list1的第m-1个元素,并加入到list2
    //如果大于list1的长度,取模得到k,分两种情况,如果等于0,直接得到list1的第0个元素,否则去list1的第k-1个元素,兵加入list2
    while(!list1.isEmpty()){
    if(m <= list1.size()){ obj = list1.remove(m - 1);
    list2.add(obj);
    }else{
    k = m % list1.size();//取模
    if(k != 0){
    obj = list1.remove(k - 1);
    list2.add(obj);
    }
    else{
    obj = list1.remove(0);
    list2.add(obj);
    }
    }
    }

    System.out.print("输出数组:");
    for(int j = 0;j < list2.size();j++){
    System.out.print(list2.get(j) + ",");
    }
    }
    }自己想的,答案是没问题的