一著名软件公司的java笔试算法题!
一著名软件公司的java笔试算法题!
算法程序题:
该公司笔试题就1个,要求在10分钟内作完。
题目如下:用1、2、2、3、4、5这六个数字,用java写一个main函数,打印出所有不同的排列,如:512234、412345等,要求:"4"不能在第三位,"3"与"5"不能相连。
问题点数:10、回复次数:69Top
1 楼haisenmai(我应该做得到)回复于 2006-10-11 11:11:42 得分 0
瓜瓜做出来了Top
2 楼zxh2208180(九天玄狐)回复于 2006-10-11 14:29:29 得分 0
还好不是太难Top
3 楼lkjx083(浪客剑心)回复于 2006-10-12 09:07:31 得分 5
小弟写了一个,不知道对不对。
package test2;
public class Combination {
/**
* @param args
*/
private static int i, j, k, l, m;
public static void main(String[] args) {
// TODO Auto-generated method stub
int sum=0;
int[] array = { 0, 0, 0, 0, 0 };
boolean find = false;
int p = 0;
for (i = 1; i <= 5; i++) {
for (j = 1; j <= 5; j++) {
if (j == i)
continue;
array[0] = i;
for (k = 1; k <= 5; k++) {
if (k == j || k == i)
continue;
array[1] = j;
for (l = 1; l <= 5; l++) {
if (l == i || l == j || l == k || k == 4)
continue;
array[2] = k;
for (m = 1; m <= 5; m++) {
if (m == i || m == j || m == k || m == l)
continue;
array[3] = l;
array[4] = m;
while (find == false && p <= 4) {
if (array[p] == 3 || array[p] == 5) {
if ((p + 1) <= 4) {
if (array[p + 1] == 3
|| array[p + 1] == 5) {
find = true;
break;
}
}
}
p++;
}
if (find == false) {
sum++;
print(array);
}else
{
find=false;
}
p=0;
}
}
}
}
}
System.out.println(sum);
}
public static void print(int[] array) {
for (int count = 0; count <= 4; count++)
System.out.print(array[count]);
System.out.println();
}
}
Top
4 楼lkjx083(浪客剑心)回复于 2006-10-12 09:18:21 得分 0
看了别人的程序实在是丢人那
http://community.csdn.net/Expert/topic/5068/5068524.xml?temp=.2323725Top
5 楼arbiter(同济流氓)回复于 2006-10-12 10:32:22 得分 5
看见大家循环套循环,圈圈套圈圈的写法,我实在是忍无可忍了,6个数字还好,给你一百个数字,是不是准备百环大作战了?
我来实现一下我之前讲的基本思路:
1 把问题归结为图结构的遍历问题。实际上6个数字就是六个结点,把六个结点连接成无向连通图,对于每一个结点求这个图形的遍历路径,所有结点的遍历路径就是最后对这6个数字的排列组合结果集。
2 显然这个结果集还未达到题目的要求。从以下几个方面考虑:
1. 3,5不能相连:实际要求这个连通图的结点3,5之间不能连通, 可在构造图结构时就满足改条件,然后再遍历图。
2. 不能有重复: 考虑到有两个2,明显会存在重复结果,可以把结果集放在TreeSet中过滤重复结果
3. 4不能在第三位: 仍旧在结果集中去除满足此条件的结果。
采用二维数组定义图结构,最后的代码是:
import java.util.Iterator;
import java.util.TreeSet;
public class TestQuestion {
private String[] b = new String[]{"1", "2", "2", "3", "4", "5"};
private int n = b.length;
private boolean[] visited = new boolean[n];
private int[][] a = new int[n][n];
private String result = "";
private TreeSet set = new TreeSet();
public static void main(String[] args) {
new TestQuestion().start();
}
private void start() {
// Initial the map a[][]
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
if (i == j) {
a[i][j] = 0;
} else {
a[i][j] = 1;
}
}
}
// 3 and 5 can not be the neighbor.
a[3][5] = 0;
a[5][3] = 0;
// Begin to depth search.
for (int i = 0; i < n; i++) {
this.depthFirstSearch(i);
}
// Print result treeset.
Iterator it = set.iterator();
while (it.hasNext()) {
String string = (String) it.next();
// "4" can not be the third position.
if (string.indexOf("4") != 2) {
System.out.println(string);
}
}
}
private void depthFirstSearch(int startIndex) {
visited[startIndex] = true;
result = result + b[startIndex];
if (result.length() == n) {
// Filt the duplicate value.
set.add(result);
}
for(int j = 0; j < n; j++) {
if (a[startIndex][j] == 1 && visited[j] == false) {
depthFirstSearch(j);
} else {
continue;
}
}
// restore the result value and visited value after listing a node.
result = result.substring(0, result.length() -1);
visited[startIndex] = false;
}
}
可以结贴了。
Top
6 楼youshangming(明明)回复于 2006-10-12 15:52:16 得分 0
arbiter(同济流氓) 的结果还是有4在第三位。。Top
7 楼arbiter(同济流氓)回复于 2006-10-12 16:02:32 得分 0
这个代码在其它帖子里已经验证过了,绝对没问题的。你把结果贴上来看,好好检查一下,你是不是跑了我的代码
// Print result treeset.
Iterator it = set.iterator();
while (it.hasNext()) {
String string = (String) it.next();
// "4" can not be the third position.
if (string.indexOf("4") != 2) {
System.out.println(string);
}
}
}
打印结果集的代码里已经去掉4在第三位的情况了Top
8 楼oDon(孤独绑定)回复于 2006-10-12 18:44:52 得分 0
数据结构 离散数学的题目Top
9 楼datalover(白发始立发奋志)回复于 2006-10-16 21:00:54 得分 0
eeTop
10 楼skyairmj(方外)回复于 2006-10-16 21:15:43 得分 0
arbiter(同济流氓)的算法确实很妙Top
11 楼JAVA2050(箫箫秋雨)回复于 2006-10-17 09:29:53 得分 0
都比较牛,看着都晕Top
12 楼wanglian1024()回复于 2006-10-17 11:31:08 得分 0
咋看不懂题目呢,“用1、2、2、3、4、5这六个数字”怎么能打出“412345”?Top
13 楼abcwangdragon()回复于 2006-10-18 17:35:16 得分 0
确实用图来解决简化了问题,我定义了相似的类却,没想到这是图。晕Top
14 楼passos(古月春秋)回复于 2006-10-24 15:08:47 得分 0
偶也贴个程序,比较的短。也是基于递归的遍历,不过没有用图结构。
public class Assemble {
public void getAssemble(String result, Vector<Character> source)
{
if ( (result.length() == 3) && (result.charAt(2) == '4') )
return;
if ( result.endsWith("35") || result.endsWith("53"))
return;
if ( result.length() == 6 )
{
System.out.println(result);
return;
}
for (int i=0; i<source.size(); i++)
{
Vector<Character> t = (Vector<Character>)source.clone();
t.remove(i);
getAssemble(result + source.get(i), t);
}
}
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Assemble as = new Assemble();
Vector<Character> v = new Vector<Character>();
v.add('1'); v.add('2'); v.add('2');
v.add('3'); v.add('4'); v.add('5');
as.getAssemble("", v);
System.out.println("Done");
}
}Top
15 楼moon_cool(月影剑)回复于 2006-10-24 15:43:54 得分 0
学习一下~~
Top
16 楼aondy1(爆宇)回复于 2006-10-25 17:07:47 得分 0
牛啊Top
17 楼cz0797(ksd)回复于 2006-10-25 23:08:39 得分 0
这个程序我以前考高程的时候做过,用回溯法可做出来。Top
18 楼churchatp1(别看资料,看聊效!)回复于 2006-10-26 11:21:35 得分 0
递归不久行了啊
呵呵Top
19 楼jszhaochengming(厚发)回复于 2006-10-26 16:20:40 得分 0
大家好,只有10分钟时间,我估计还是用for循环来做比较实惠快速,毕竟只要能把题目做出来就OK了Top
20 楼jszhaochengming(厚发)回复于 2006-10-26 16:22:45 得分 0
For循环的方法
public class Test2 {
public static void main(String args[]) {
char[] c = {'1','2','2','3','4','5'};
for (int i = 0; i < c.length; i++ ) {
for (int j = 0; j < c.length; j++) {
if (i == j || (c[i]=='3' && c[j]=='5'))
continue;
for (int k = 0; k < c.length; k++) {
if (k==i || k==j || (c[j]=='3' && c[k]=='5') || c[k] =='4') {
continue;
}
for (int m = 0; m < c.length; m++) {
if (m == k || m == i || m == j || (c[k]=='3' && c[m]==5)) {
continue;
}
for (int n = 0; n < c.length; n++) {
if (n == m || n == k || n == i || n == j || (c[m]=='3' && c[n]=='5')) {
continue;
}
for (int l = 0; l < c.length; l++) {
if (l == n || l == m || l == k || l == j || l == i || (c[n] == '3' && c[l] == '5')) {
continue;
}
System.out.println(c[i]+""+c[j]+""+c[k]+""+c[m]+""+c[n]+""+c[l]);
}
}
}
}
}
}
}
}Top
21 楼jszhaochengming(厚发)回复于 2006-10-26 16:53:54 得分 0
递归方法
public class Test2 {
public int[] getNextDifPos(int[] before, int add) {
int [] res = new int[before.length+1];
for (int i = 0; i < before.length; i++) {
res[i] = before[i];
}
res[res.length-1] = add;
return res;
}
public int getNextPos(int[] pos) {
for (int i =0 ; i < pos.length; i++) {
if (pos[i]!=-1){
return i;
}
}
return -1;
}
public void getStr(int[] before,char[] chars) {
if (before.length == chars.length) {
StringBuffer str = new StringBuffer();
for (int i = 0; i < before.length; i++) {
str.append(chars[before[i]]);
}
//加判断条件
if (str.charAt(2)=='4' || str.indexOf("35") >=0) {
return ;
}
System.out.println(str.toString());
} else if (before.length < chars.length) {
int[] pos = new int[chars.length];
for (int i = 0; i < before.length; i++) {
pos[before[i]] = -1;
}
int nextPos;
while ( (nextPos=getNextPos(pos)) != -1) {
pos[nextPos] = -1;
getStr(getNextDifPos(before,nextPos),chars);
}
}
}
public static void main(String args[]) {
char[] c = {'1','2','2','3','4','5'};
int[] l = {};
Test2 t = new Test2();
t.getStr(l,c);
}
}Top
22 楼eureka0891(迷茫中...)回复于 2006-10-27 10:57:06 得分 0
package find;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Iterator;
import java.util.List;
public class Combination {
public static void main(String[] args) throws Exception {
int[] array = new int[] { 1, 2, 2, 3, 4, 5 };
List result=new ArrayList();
find(array, new int[0],result);
for (int i = 0; i < result.size(); i++) {
int[] resultArray=(int[])result.get(i);
System.out.println(i+"\t=:"+Arrays.toString(resultArray));
}
}
public static void find(final int[] restArray, final int[] inArray, List result){
if(restArray.length == 1){
int now = restArray[restArray.length-1];
if(inArray[inArray.length-1] == 3 && now == 5){
return;
}else if(inArray[inArray.length-1] == 5 && now == 3){
return;
}
int[] resultArray=new int[inArray.length +1];
System.arraycopy(inArray, 0, resultArray, 0, inArray.length);
resultArray[inArray.length]=now;
result.add(resultArray);
}else{
for (int i = 0; i < restArray.length; i++) {
int now = restArray[i];
//check 3rd is not 4, skip
if( inArray.length == 2 && now == 4){
continue;
}
//check 3,5 order
if( inArray.length > 0){
if(inArray[inArray.length-1] == 3 && now == 5){
continue;
}else if(inArray[inArray.length-1] == 5 && now == 3){
continue;
}
}
int[] nextRestArray=new int[restArray.length -1];
int[] nextInArray=new int[inArray.length +1];
System.arraycopy(restArray,0, nextRestArray, 0, i);
System.arraycopy(restArray,i+1, nextRestArray, i, nextRestArray.length-i);
System.arraycopy(inArray, 0, nextInArray, 0, inArray.length);
nextInArray[inArray.length]=now;
find(nextRestArray, nextInArray, result);
}
}
}
}
Top
23 楼eureka0891(迷茫中...)回复于 2006-10-27 11:36:47 得分 0
还有就是如果考虑1、2、2、3、4、5里有两个2
则程序如下:
package find;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Iterator;
import java.util.List;
public class Combination {
public static void main(String[] args) throws Exception {
int[] array = new int[] { 1, 2, 2, 3, 4, 5 };
List result=new ArrayList();
find(array, new int[0],result);
for (int i = 0; i < result.size(); i++) {
int[] resultArray=(int[])result.get(i);
System.out.println(i+"\t=:"+Arrays.toString(resultArray));
}
}
public static void find(final int[] restArray, final int[] inArray, List result){
if(restArray.length == 1){
int now = restArray[restArray.length-1];
if(inArray[inArray.length-1] == 3 && now == 5){
return;
}else if(inArray[inArray.length-1] == 5 && now == 3){
return;
}
int[] resultArray=new int[inArray.length +1];
System.arraycopy(inArray, 0, resultArray, 0, inArray.length);
resultArray[inArray.length]=now;
result.add(resultArray);
}else{
boolean first2=false;
boolean second2=false;
for (int i = 0; i < restArray.length; i++) {
int now = restArray[i];
if(now == 2){
if(first2 == false) first2 = true;
else second2 = true;
}
if(second2){
first2=false;
second2=false;
continue;
}
//check 3rd is not 4, skip
if( inArray.length == 2 && now == 4){
continue;
}
//check 3,5 order
if( inArray.length > 0){
if(inArray[inArray.length-1] == 3 && now == 5){
continue;
}else if(inArray[inArray.length-1] == 5 && now == 3){
continue;
}
}
int[] nextRestArray=new int[restArray.length -1];
int[] nextInArray=new int[inArray.length +1];
System.arraycopy(restArray,0, nextRestArray, 0, i);
System.arraycopy(restArray,i+1, nextRestArray, i, nextRestArray.length-i);
System.arraycopy(inArray, 0, nextInArray, 0, inArray.length);
nextInArray[inArray.length]=now;
find(nextRestArray, nextInArray, result);
}
}
}
}
Top
24 楼hdhmail2000(禅剑飞雪)回复于 2006-10-30 18:09:52 得分 0
呵呵,看看我这个怎么样,十分钟我估计不能写的太复杂:
public class Ok {
/**
* @param args
*/
public static void main(String[] args)
{
for(int i=111111;i<=555555;i++)
{
String a=String.valueOf(i);
String[] b=a.split("");
int flag=0;
if(b[2].equalsIgnoreCase("4"))
{
flag=1;
}
if(flag!=1)
{
for(int j=0;j<b.length;j++)
{
if(b[j].equalsIgnoreCase("6"))
{
flag=1;
break;
}
if(b[j].equalsIgnoreCase("7"))
{
flag=1;
break;
}
if(b[j].equalsIgnoreCase("8"))
{
flag=1;
break;
}
if(b[j].equalsIgnoreCase("9"))
{
flag=1;
break;
}
if(b[j].equalsIgnoreCase("0"))
{
flag=1;
break;
}
if(j<b.length-1)
{
if((b[j]+b[j+1]).equalsIgnoreCase("35")||(b[j]+b[j+1]).equalsIgnoreCase("53"))
{
flag=1;
break;
}
}
}
}
if(flag==0)
{
System.out.println(i);
}
}
}
}
Top
25 楼woaiwanghuan(我不学习是猪)回复于 2006-10-31 15:52:29 得分 0
数据结构书上有!Top
26 楼CpRcF(尘埃)回复于 2006-10-31 15:56:47 得分 0
这样算不算?
import java.io.*;
public class Test {
public static void main(String[] args) throws Exception{
// TODO Auto-generated method stub
FileWriter out = new FileWriter("result.txt");
int count = 0;
for(int i = 122345;i <= 543221;i++) {
String s = new String(i + " , ");
if(s.indexOf("4") == 2){
continue;
} else if(s.indexOf("35") >= 0 || s.indexOf("53") >= 0) {
continue;
} else {
count ++;
out.write(s,0,s.length());
}
}
System.out.println("find : " + count);
out.close();
}
}Top
27 楼woaiwanghuan(我不学习是猪)回复于 2006-10-31 16:13:35 得分 0
我做不完!Top
28 楼woaiwanghuan(我不学习是猪)回复于 2006-10-31 16:19:55 得分 0
等价成图遍历,同时规定连通方向,是不错的解决办法Top
29 楼daizhenbest(牛牛)回复于 2006-11-02 23:35:14 得分 0
一著名软件公司的java笔试算法题!
算法程序题:
该公司笔试题就1个,要求在10分钟内作完。
题目如下:用1、2、2、3、4、5这六个数字,用java写一个main函数,打印出所有不同的排列,如:512234、412345等,要求:"4"不能在第三位,"3"与"5"不能相连。
----------------------------------------------------------------------------------
人家是要"一个main函数"................Top
30 楼phuwan()回复于 2006-11-15 12:53:23 得分 0
upTop
31 楼jianghuxiaoxiami(江湖小虾米)回复于 2006-11-15 15:35:56 得分 0
CpRcF(尘埃) 思路确实新颖,简单明了Top
32 楼hinco(桃色德鲁依)回复于 2006-11-16 18:38:39 得分 0
只一个main的话用递推吧,和八皇后的递推类似Top
33 楼maka007(零下一度)回复于 2006-11-16 19:26:02 得分 0
CpRcF(尘埃) 思路确实新颖,简单明了Top
34 楼merobert()回复于 2006-11-16 22:29:32 得分 0
CpRcF(尘埃) 好像没有理解对题目Top
35 楼Matthiola(Matthiola)回复于 2006-11-17 09:34:17 得分 0
CpRcF(尘埃) 是对的啊 4 不能在 3 35 不相连Top
36 楼softdn2()回复于 2006-11-17 12:39:45 得分 0
这么简单的。HARD CODE好了
------ 以下是签名 ------
SoftDN.com, 提供免费的项目管理平台:SVN仓库、需求管理、BUG跟踪、任务管理、在线论坛、网站空间、项目存储及完整的备份等。欢迎网友光临建立项目,开创自己的梦想。
地址:http://www.softdn.com http://www.softdn.cnTop
37 楼Neil_Dang(C∞l Dog)回复于 2006-11-17 16:40:52 得分 0
不晓得对不对 你们看一下
public void print(List nums1, List nums2)
{
if (nums1 != null && nums2 != null)
{
ArrayList list = new ArrayList();
String temp = "";
String temp1 = "";
String temp2 = "";
for (int i = 0; i < nums1.size(); i++)
{
for (int j = 0; j < nums2.size(); j++)
{
temp = nums1.get(i).toString() + nums2.get(j).toString();
temp1 = nums1.get(i).toString();
temp2 = nums2.get(j).toString();
{
char[] tmp = temp.toCharArray();
boolean isUsable = true;
for (int k = 0; k < tmp.length; k++)
{
if (isDup(temp, tmp[k]))
{
isUsable = false;
break;
}
if (k < tmp.length - 1)
{
if (Integer.parseInt(String.valueOf(tmp[k]))
+ Integer.parseInt(String.valueOf(tmp[k+1])) == 8)
{
isUsable = false;
break;
}
}
}
if (isUsable)
{
list.add(temp);
if (temp.length() == 6 && temp.charAt(3) == '4')
{
System.out.println(temp);
}
}
}
}
}
if (temp.length() <6){
if (temp1.length() == temp2.length())
{
print(list, nums1);
} else
{
print(list, nums1);
print(list, nums2);
}
}
} else if (nums1 != null)
{
print(nums1, nums1);
} else if (nums2 != null)
{
print(nums2, nums2);
}
}
public boolean isDup(String str, char ch)
{
int start = str.indexOf(ch);
int end = str.lastIndexOf(ch);
if (start != end)
return true;
else
return false;
}Top
38 楼Neil_Dang(C∞l Dog)回复于 2006-11-17 16:57:29 得分 0
直接从ECLIPSE里面COPY出来的 没想到这么乱
可以把程序拷贝运行 一共有64个值 不知道对不对
public class Test
{
public static void main(String[] args)
{
ArrayList list = new ArrayList();
list.add("1");
list.add("2");
list.add("3");
list.add("4");
list.add("5");
list.add("6");
new Test().print(list, null);
}
}Top
39 楼nako_ruru(娜可露露)回复于 2006-11-18 11:36:22 得分 0
public class Combination {
public static void main(String[] args) {
Character[] numbers = new Character[] {'1', '2', '2', '3', '4', '5'};
Collection<String> combinations = combine(Arrays.asList(numbers));
System.out.printf("共计%d个\n", combinations.size());
for(String buffer: combinations) {
System.out.println(buffer);
}
}
private static Set<String> combine(Collection<Character> characters) {
if(characters.size() == 1) {
String value = characters.iterator().next().toString();
return Collections.singleton(value);
}
Set<String> returnValue = new TreeSet();
//遍历ccharacters中的每一个字符,将剩余的字符作为一个集体
for(Character c: characters) {
Collection<Character> left = new LinkedList(characters);
left.remove(c);
Collection<String> combinations = combine(left);
for(String buffer: combinations) {
String newBuffer = buffer + c;
if(filter(newBuffer)) {
returnValue.add(newBuffer);
}
}
}
return returnValue;
}
private static boolean filter(String value) {
int length = value.length();
if(length < 2) {
return true;
}
if(value.endsWith("35") || value.endsWith("53")) {
return false;
}
if(length < 4) {
return true;
}
if(value.charAt(3) == '4') {
return false;
}
return true;
}
}Top
40 楼rypgood(失魂)回复于 2006-11-19 02:28:33 得分 0
class TestFloat
{
public static void main(String[] args)
{
char[] a="12345".toCharArray();
char[] b=new char[a.length];
for(int i=0;i<5;i++)
{
b[0]=a[i];
drop(a,i);
for(int j=0;j<4;j++)
{
b[1]=a[j];
drop(a,j);
for(int k=0;k<3;k++)
{
b[2]=a[k];
drop(a,k);
for(int l=0;l<2;l++)
{
b[3]=a[l];
drop(a,l);
b[4]=a[0];
System.out.println(new String(b).toString());
a="12345".toCharArray();
}
}
}
}
}
static void drop(char[] a,int i)
{
for(int j=i+1;j<a.length;j++)
{
a[j-1]=a[j];
}
}
}Top
41 楼rypgood(失魂)回复于 2006-11-19 02:30:13 得分 0
啊哦 竟然是错的,不好意思哈Top
42 楼rypgood(失魂)回复于 2006-11-19 02:40:52 得分 0
class TestFloat
{
public static void main(String[] args)
{
char[] a="12345".toCharArray();
char[] b=new char[a.length];
for(int i=0;i<5;i++)
{
b[0]=a[i];
drop(a,i);
for(int j=0;j<4;j++)
{
b[1]=a[j];
drop(a,j);
for(int k=0;k<3;k++)
{
b[2]=a[k];
drop(a,k);
for(int l=0;l<2;l++)
{
b[3]=a[l];
drop(a,l);
b[4]=a[0];
System.out.println(new String(a).toString());
a="12345".toCharArray();
}
}
}
}
}
static void drop(char[] a,int i)
{
char x=a[i];
for(int j=i+1;j<a.length;j++)
{
a[j-1]=a[j];
}
a[a.length-1]=x;
}
}
这次应该没有错了吧Top
43 楼chen77716(tony)回复于 2006-11-23 10:32:16 得分 0
static int[] bits = new int[] { 1, 2, 3, 4, 5 };
/**
* @param args
*/
public static void main(String[] args) {
sort("", bits);
}
private static void sort(String prefix, int[] a) {
if (a.length == 1) {
System.out.println(prefix + a[0]);
}
for (int i = 0; i < a.length; i++) {
sort(prefix + a[i], copy(a, i));
}
}
private static int[] copy(int[] a,int index){
int[] b = new int[a.length-1];
System.arraycopy(a, 0, b, 0, index);
System.arraycopy(a, index+1, b, index, a.length-index-1);
return b;
}Top
44 楼rypgood(失魂)回复于 2006-11-25 16:16:51 得分 0
楼上的算法厉害
能不能解释一下啊Top
45 楼liurong198426(平淡生活)回复于 2006-11-28 00:37:04 得分 0
CpRcF(尘埃)兄的思路确实很独特,只是中间差了一些代码!可以利用
indexOf(String str, int fromIndex) 函数来确定是否将{1,2,2,3,4,5}都包含进去了~
就OK
佩服CpRcF(尘埃)兄Top
46 楼phuwan()回复于 2006-12-02 13:00:09 得分 0
大家好像都写的不错了哦~
嘿嘿~~~
Top
47 楼weky(weky)回复于 2006-12-04 10:16:17 得分 0
矿用循环
~~~~~~~Top
48 楼amu112964()回复于 2006-12-05 15:22:11 得分 0
学到不少东东!Top
49 楼mixianger(米香儿)回复于 2006-12-05 16:15:12 得分 0
好帖留名。Top
50 楼hujiaboy(勿以恶小而不为)回复于 2006-12-07 22:11:09 得分 0
10分钟。。。牛啊Top
51 楼gfcs19840222(相信时间)回复于 2006-12-07 23:57:24 得分 0
用经典的全排列算法求出所有的组合,按照要求去掉他不要的。
google permute algorithm
我记得以前背过,不用图算法,代码很短。
现在忘了。呵呵。Top
52 楼XXKKFF(齐次边界条件有界弦自由振动方程混合问题的分离变量法-_-!!!)回复于 2006-12-09 22:37:31 得分 0
强啊
我顶Top
53 楼xiciliu()回复于 2006-12-10 01:12:08 得分 0
markTop
54 楼gd_frank(frank)回复于 2006-12-11 16:30:39 得分 0
public class Untitled1 {
public static int count=0;
public Untitled1() {
}
/**
* 递归处理
* @param buffer char[]
* @param col int
* @param printBuffer char[]
*/
private static void print(char[] buffer,int col,char[] printBuffer){
int i,j,z;
char[] tmpBuffer;
char[] prnBuffer=new char[6];
for(i=0; i<buffer.length; i++){
printBuffer[col]=buffer[i];
if(printBuffer[2]=='4')
continue;
if(col>1){
if (printBuffer[col] == '5' && printBuffer[col - 1] == '3')
continue;
if (printBuffer[col] == '3' && printBuffer[col - 1] == '5')
continue;
}
prnBuffer=String.valueOf(printBuffer,0,printBuffer.length).toCharArray();
if (buffer.length==1){
System.out.println(prnBuffer);
}
tmpBuffer=new char[buffer.length-1];
for(j=0,z=0; j<buffer.length; j++){
if (j!=i)
tmpBuffer[z++]=buffer[j];
}
if(col<6){
print(tmpBuffer, col + 1, prnBuffer);
count++;
}
}
}
public static void main(String[] args) {
char[] buffer=new char[]{'1','2','2','3','4','5'};
char[] printBuffer=new char[6];
Untitled1 u=new Untitled1();
u.print(buffer,0,printBuffer);
System.out.println("总数为:"+u.count);
}
}Top
55 楼jesse8013(每天进步一点点)回复于 2006-12-12 21:47:50 得分 0
偶也 写了个 不过 偶发得时间 >>大于 10m ;<
import java.util.*;
public class ComSort {
private ArrayList res;
public ComSort(){
res=new ArrayList();
}
public static void main(String[] args){
ArrayList array=new ArrayList();
StringBuffer sb=new StringBuffer();
for(int i=1;i<6;i++){
array.add(i);
}
ComSort cs=new ComSort();
cs.compute(array,sb);
ArrayList res=cs.getArray();
ArrayList remove=new ArrayList();
for(Object o:res){
String value=o.toString();
if((value.indexOf("4")==2)||(value.indexOf("45")!=-1)){
remove.add(value);
}
}
for(Object o:remove){
res.remove(o);
}
for(Object o:res){
System.out.println(o.toString());
}
}
public void compute(ArrayList array,StringBuffer sb){
if(!array.isEmpty()){
for(int i=0;i<array.size();i++){
sb.append(array.get(i));
ArrayList array2=(ArrayList)array.clone();
array2.remove(i);
compute(array2,sb);
sb.delete(sb.length()-1,sb.length());
}
}else{
res.add(sb.toString());
}
}
public ArrayList getArray(){
return res;
}
}
Top
56 楼auuppp()回复于 2007-02-26 17:44:59 得分 0
楼上的你的3和5 相连了 重写 我是个菜鸟 啥也不会Top
57 楼colinmok(colinmok)回复于 2007-02-27 10:46:08 得分 0
高呀..Top
58 楼colinmok(colinmok)回复于 2007-02-27 10:46:29 得分 0
学习中...Top
59 楼whyxx(最近有点闲)回复于 2007-02-27 16:50:38 得分 0
随便写了一个,效率可能不是很高
import java.io.BufferedWriter;
import java.io.FileWriter;
public class Test {
public static void main(String[] args) throws Exception {
BufferedWriter out = new BufferedWriter(new FileWriter("result.txt"));
String separator = System.getProperty("line.separator");
int count = 0;
for (int i = 122345; i <= 543221; i++) {
String s = "" + i;
if (s.indexOf("4") == 2) {
continue;
} else if (s.indexOf("35") >= 0 || s.indexOf("53") >= 0) {
continue;
} else {
String aaa = "122345";
boolean exist = true;
for (int j = 0; j < s.length(); j++) {
char a = s.charAt(j);
int index = aaa.lastIndexOf(a);
if (index == -1) {
exist = false;
break;
} else {
aaa = aaa.substring(0, index) + aaa.substring(index + 1);
}
}
if (!exist) {
continue;
}
count++;
out.write(s + separator);
}
}
System.out.println("find : " + count);
out.close();
}
}Top
60 楼d8111()回复于 2007-02-28 09:49:32 得分 0
学习了。。。图然来是这么用的Top
61 楼vickcy(逍遥孤云)回复于 2007-02-28 14:39:43 得分 0
mark
Top
62 楼RedCnMFW(9点31分)回复于 2007-02-28 19:05:37 得分 0
学习.学习.Top
63 楼lxwin01(阿幸)回复于 2007-02-28 21:07:40 得分 0
markTop
64 楼lrsbill()回复于 2007-03-03 18:46:15 得分 0
学习.学习.Top
65 楼jpinglove()回复于 2007-03-03 22:39:58 得分 0
高手怎么都躲这里了.Top
66 楼guoxulijie()回复于 2007-03-03 23:45:51 得分 0
我新手 ,大家不要见笑, 我想能不能这样考虑着个问题 :
利用java 中的集合 象 arriylist 等 先把着6个数字 放到集合中 然后进行混排,
然后依次取出,下来再进行判断 是否满足条件 不满足的话 返回继续循环 满足的话输出 返回继续循环 。
大家看下着样行吗 ?Top
67 楼xuzhenqinandy(许振勤)回复于 2007-03-04 09:32:31 得分 0
CpRcF(尘埃)兄弟有的地方写的不全,我改拉下程序。下面应该符合楼主的要求
import java.io.FileWriter;
import java.util.regex.Pattern;
import java.util.regex.Matcher;
public class Test {
public static void main(String[] args) throws Exception {
FileWriter out = new FileWriter("result.txt");
for (int i = 122345; i <= 543221; i++) {
String s = String.valueOf(i);
if (s.indexOf("35") >= 0 || s.indexOf("53") >= 0) {
continue;
} else{
//必须是1,2,3,4,5之间的数字
Pattern p = Pattern.compile("^[1-5]{6}$");
Matcher m = p.matcher(s);
boolean b = m.matches();
if (b) {
//第三位不能为4
Pattern pat = Pattern.compile("^[1-5]{2}[^4][1-5]{3}$");
Matcher mat = pat.matcher(s);
boolean bool = mat.matches();
if (bool) {
s = s + "\r\n";
out.write(s, 0, s.length());
}
}
}
}
out.close();
}
}Top
68 楼passyt(与笑凌)回复于 2007-03-06 14:01:16 得分 0
10分钟的题目,没必要那么的认真撒:
for(int i=122345;i<=543221;i++){
String temp=String.valueOf(i);
if(temp.indexOf("1")+temp.indexOf("2")+temp.lastIndexOf("2")+temp.indexOf("3")+temp.indexOf("4")+temp.indexOf("5")==0+1+2+3+4+5
&&temp.indexOf("1")>=0&&temp.lastIndexOf("2")>=0&&temp.indexOf("2")>=0&&temp.indexOf("3")>=0&&temp.indexOf("4")>=0&&temp.indexOf("5")>=0){
if(temp.charAt(2)!='4'&&temp.indexOf("35")==-1&&temp.indexOf("53")==-1)
System.out.println(temp);
}
}Top
69 楼linger52102(Java工兵)回复于 2007-03-07 09:29:10 得分 0
这样的题目在十分钟内写出算法和程序并调试出来很有难度哎,定Top




