今天去了趟北京什么研究所 面试java工程师,给我来了两个算法题,当时就把哥们给制住了,
晚上回来以后充电百度了一下 全是C语言代码解法,我擦,C我不懂啊,有么有大哥用java思路说说算法,给出代码那就更好了N0.1加100完全平方数,再加168还是完全平方数,说出算法,N0.2
N个人围一圈,数到m个人出列,然后继续接着往下数,写出算法和流程图、
晚上回来以后充电百度了一下 全是C语言代码解法,我擦,C我不懂啊,有么有大哥用java思路说说算法,给出代码那就更好了N0.1加100完全平方数,再加168还是完全平方数,说出算法,N0.2
N个人围一圈,数到m个人出列,然后继续接着往下数,写出算法和流程图、
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
//什么环我早忘光了,呵呵
//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);
}
}
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;
}
在抛个砖手算就出来了
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;
}
}
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) + ",");
}
}
}自己想的,答案是没问题的