您的位置:首页 > 职场人生

面试遇到的两道算法题

2009-10-29 14:39 447 查看
10月27日面试时候做的两道题目,用了一个多小时才做出来,感觉这种题目蛮有意思的。

import java.util.List;
import java.util.ArrayList;
public class Demo {

public static void main(String args[]) {
Demo demo = new Demo();

System.out.println("第二题:");
demo.test2();

System.out.println();
System.out.println();

System.out.println("第三题:");
demo.test3();
}

@SuppressWarnings("unchecked")
public void test2(){
/*
* 调用java.lang.Math的成员函数“public static double random()”,
* 设法生产20个互不相同的从a到z字母,然后对这20个字母从大到小的方式排序。
* 输出排序前的字母序列与排序后的字母序列
*/

//所有字母组成的一个链表,起辅助作用
List list = new ArrayList();
for (int i = 97; i <=122; i++) {
list.add((char)i);
}

//创建字母数组
char[] array = new char[20];

//字母数组赋值
for(int i=0;i< array.length;i++){
double rand = Math.random();
int index = (int) (list.size()*rand);
array[i] = (Character) list.get(index);
list.remove(index);
}

System.out.println("排序前:");
for (int i = 0; i < array.length; i++) {
System.out.print(array[i]+" ");
}

//插入排序
for (int i = 1; i < array.length; i++) {
for (int j = i; j >0; j--) {
if(array[j]<array[j-1]){
char xyz = array[j];
array[j] = array[j-1];
array[j-1] = xyz;
}else{
break;
}
}
}

System.out.println();
System.out.println("排序后:");
for (int i = 0; i < array.length; i++) {
System.out.print(array[i]+" ");
}

}

public void  test3(){
/*
* 有50个人站成一个圈,
* 第一个人开始数数(从1开始),每数到3或者3的倍数此人就退出
* 最后剩下的人是多少号?(编程实现)
*/

//定义数组并编号
int[] array = new int[50];
for (int i = 0; i < array.length; i++) {
array[i] = i+1;
}

//当前数数人的编号
int id = 0;
//当前要数的数字
int number = 1;
//数组中值为0的项数
int count = 0;

for(;;){
if(number%3==0){
array[id]=0;
count ++;
if(count>=array.length-1){
break;
}
}
number++;
while(true){
if(id < array.length-1){
id++;
}else{
id = 0;
}
if(array[id]!=0)break;
}
}

for (int i = 0; i < array.length; i++) {
if(array[i]!=0){
System.out.println("最终留下的会是第"+array[i]+"个人");
}
}

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: