今天到去面试,问到一个发牌程序到算法问题(54张牌不分花色发给ABC三个人).寡人给出到算法实现代码如下算法1:不洗牌,顺序发牌,但是每张牌发给A,B,C是随机的
package com;import java.util.ArrayList;
import java.util.List;public class Test1 { /**
* @param args
*/
static List a = new ArrayList<Integer>();
static List b = new ArrayList<Integer>();
static List c = new ArrayList<Integer>(); public static void main(String[] args) {
// TODO Auto-generated method stub for (int i = 1; i <= 54; i++) {
fill(i);
}
System.out.println(a);
System.out.println(b);
System.out.println(c);
} private static void fill(int i) {
int r = (int) (java.lang.Math.random() * 3) + 1;
//System.out.println(r);
if (r == 1 && a.size() < 18) {
a.add(i);
return;
} if (r == 1 && a.size() >= 18) {
fill(i);
return;
}
if (r == 2 && b.size() < 18) {
b.add(i);
return;
}
if (r == 2 && b.size() >= 18) {
fill(i);
return;
}
if (r == 3 && c.size() < 18) {
c.add(i);
return;
}
if (r == 3 && c.size() >= 18) {
fill(i);
return;
}
}}
算法2:考官给出到算法
用list顺序保存1-54个数,每次随机找出一个发给ABC,并将list里已发到remove点,继续发下一张牌代码如下package com;import java.util.ArrayList;
import java.util.List;public class Test2 { /**
* @param args
*/
static List a = new ArrayList<Integer>();
static List b = new ArrayList<Integer>();
static List c = new ArrayList<Integer>(); public static void main(String[] args) {
// TODO Auto-generated method stub
List list = new ArrayList<Integer>(); for (int i = 1; i <= 54; i++) {
list.add(i);
}
while(list.size()>0){
int size=list.size();
int r=(int) (java.lang.Math.random() * size);
if(a.size()<18){
a.add(list.get(r));
list.remove(r);
continue;
}
if(b.size()<18){
b.add(list.get(r));
list.remove(r);
continue;
}
if(c.size()<18){
c.add(list.get(r));
list.remove(r);
continue;
}
}
System.out.println(a);
System.out.println(b);
System.out.println(c);
}}
算法三:我后来查JDK想出来到
用list顺序保存1-54个数,再用java.util.Collections.shuffle方法把list的元素随机排列,代码最少
ackage com;import java.util.ArrayList;
import java.util.List;
public class Test { /**
* @param args
*/
static List a = new ArrayList<Integer>();
static List b = new ArrayList<Integer>();
static List c = new ArrayList<Integer>();
public static void main(String[] args) {
// TODO Auto-generated method stub
List list=new ArrayList<Integer>();
for(int i=1;i<=54;i++){
list.add(i);
}
java.util.Collections.shuffle(list);
a=list.subList(0, 18);
System.out.println(a);
b=list.subList(18, 36);
System.out.println(b);
c=list.subList(36, 54);
System.out.println(c);
}}
请各位看管点评下几种算法到问题和效率,并补充好到算法大家交流下
package com;import java.util.ArrayList;
import java.util.List;public class Test1 { /**
* @param args
*/
static List a = new ArrayList<Integer>();
static List b = new ArrayList<Integer>();
static List c = new ArrayList<Integer>(); public static void main(String[] args) {
// TODO Auto-generated method stub for (int i = 1; i <= 54; i++) {
fill(i);
}
System.out.println(a);
System.out.println(b);
System.out.println(c);
} private static void fill(int i) {
int r = (int) (java.lang.Math.random() * 3) + 1;
//System.out.println(r);
if (r == 1 && a.size() < 18) {
a.add(i);
return;
} if (r == 1 && a.size() >= 18) {
fill(i);
return;
}
if (r == 2 && b.size() < 18) {
b.add(i);
return;
}
if (r == 2 && b.size() >= 18) {
fill(i);
return;
}
if (r == 3 && c.size() < 18) {
c.add(i);
return;
}
if (r == 3 && c.size() >= 18) {
fill(i);
return;
}
}}
算法2:考官给出到算法
用list顺序保存1-54个数,每次随机找出一个发给ABC,并将list里已发到remove点,继续发下一张牌代码如下package com;import java.util.ArrayList;
import java.util.List;public class Test2 { /**
* @param args
*/
static List a = new ArrayList<Integer>();
static List b = new ArrayList<Integer>();
static List c = new ArrayList<Integer>(); public static void main(String[] args) {
// TODO Auto-generated method stub
List list = new ArrayList<Integer>(); for (int i = 1; i <= 54; i++) {
list.add(i);
}
while(list.size()>0){
int size=list.size();
int r=(int) (java.lang.Math.random() * size);
if(a.size()<18){
a.add(list.get(r));
list.remove(r);
continue;
}
if(b.size()<18){
b.add(list.get(r));
list.remove(r);
continue;
}
if(c.size()<18){
c.add(list.get(r));
list.remove(r);
continue;
}
}
System.out.println(a);
System.out.println(b);
System.out.println(c);
}}
算法三:我后来查JDK想出来到
用list顺序保存1-54个数,再用java.util.Collections.shuffle方法把list的元素随机排列,代码最少
ackage com;import java.util.ArrayList;
import java.util.List;
public class Test { /**
* @param args
*/
static List a = new ArrayList<Integer>();
static List b = new ArrayList<Integer>();
static List c = new ArrayList<Integer>();
public static void main(String[] args) {
// TODO Auto-generated method stub
List list=new ArrayList<Integer>();
for(int i=1;i<=54;i++){
list.add(i);
}
java.util.Collections.shuffle(list);
a=list.subList(0, 18);
System.out.println(a);
b=list.subList(18, 36);
System.out.println(b);
c=list.subList(36, 54);
System.out.println(c);
}}
请各位看管点评下几种算法到问题和效率,并补充好到算法大家交流下
解决方案 »
- 一个java小题目【空瓶换可乐】
- 跪求2.0以上版本的SSH框架的jar包
- No WebApplicationContext found: no ContextLoaderListener registered?
- 关于onSubmit问题
- 高手请进:struts2和hibernate3.2问题
- java在两个oracle库间导数据的问题
- action
- 谁有james开发示例?急用!!!!
- struts中的验证问题!validation!!!
- castor xml转javabean 异常“Illegal Text data found as child of”
- urlrewrite下载
- SmartUpload如何直接下载文件到指定目录而不要弹出保存框
List list1=new ArrayList();
List list2=new ArrayList();
for(int i=0;i<9;i++){
list1.add(i);
}
for(int i=0;i<10;i++){
list2.add(i);
} for(int i=0;i<10;i++){
if(!list1.remove(new Integer((Integer) list2.get(i)))){
System.out.println(list2.get(i));
break;
}
}
}