首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2SE开发 >

一道JAVA笔试题,非常难,能不帮小弟我?

2012-01-15 
一道JAVA笔试题,非常难,各位大哥能不帮我??inta[]newint{2,6,7,5}首先把这个数组从小到大的顺序排序然后

一道JAVA笔试题,非常难,各位大哥能不帮我??
int   a[]=new   int{2,6,7,5};
首先把这个数组从小到大的顺序排序
然后对这个数组进行全排列
比如:
2567,2576,2657,2675,2756,2765,
5267,5276,5627,5672,5726,5762,
6257,6275,6527,6572,6725,6752,
7256,7265,7526,7562,7625,7652
  输出这四个数所有能排列出的可能性

[解决办法]
思路,重申一遍,思路!

你不妨这样思考,把数组元素都看成一个一个的string,于是数字的组合就是这样的。

a[0]a[1]a[2]a[3]

依此类推,不就都出来了?

第一位是a[0],后面是a[1],后面两位的组成随意,于是有两种。

其他情况依此而推,一样的。
[解决办法]
‘0000’--‘9999’ 包含四个字符的就可以 复杂度是10000次
[解决办法]
google: java permutation
[解决办法]
小狼的那个怎么感觉像是手动排列啊?

[解决办法]
http://www.merriampark.com/perm.htm
[解决办法]
定义4个变量分别表示,千位数,百位数,十位数,个位数,用4重循环如for(int i=2;i <=7;i++),然后判断这4个数的和是否等于20,如果是就输出.
[解决办法]
还是我厉害 帮你解决了 呵呵
执行过了没问题 去买饭等了半天就有思路了:)

public class Test{
public static void main(String[] args){
int a[]={1,2,3,4};
for(int i=0;i <4;i++){
for(int j=0;j <4;j++){
if(j==i)continue;
for(int k=0;k <4;k++){
if(k==i||k==j)continue;
System.out.print(a[i]*1000+a[j]*100+a[k]*10+a[6-i-j-k]);
System.out.print( " ");
}
}
System.out.println();
}
}
}

D:\javaLX> java Test
1234 1243 1324 1342 1423 1432
2134 2143 2314 2341 2413 2431
3124 3142 3214 3241 3412 3421
4123 4132 4213 4231 4312 4321
[解决办法]
图的连通问题
[解决办法]
顶 淡淡的感觉.cool.
[解决办法]
import java.util.ArrayList;
import java.util.List;
import java.util.Collections;
import java.util.Hashtable;
import java.util.Iterator;
import java.util.Enumeration;
import java.util.HashSet;

public class TestString{
public static void main(String[] args){
Hashtable ht = new Hashtable();
int num1 = 0;
int num2 = 0;
int num3 = 1;
int num4 = 0;
int num5 = 0;
String str = "1233 ";

//存放 0 - 9 各个出现的个数
int n[] = new int[10];

num2 = str.length();

//可能出现字符串的所有个数
for(;num2> 0;num2--){
num3 *= num2;
}

System.out.println(num3);
char[] ch = new char[str.length()];
str.getChars(0,str.length(),ch,0);
List list = new ArrayList();
for(int num=0;num <ch.length;num++){
list.add(new String(ch[num]+ " "));
}

//求出 0 - 9 各个出现的个数
for(int num=0;num <list.size();num++){
int index = Integer.parseInt(list.get(num).toString());
n[index]++;
}


num5 = jieCheng(n);

//num3为没有重复数字的字符串个数
num3 = num3/num5;

System.out.println(num3);


while(num4 <num3){
Collections.shuffle(list);
Iterator it = list.iterator();
StringBuffer sb = new StringBuffer( " ");


while(it.hasNext()){
sb.append(it.next());
}
ht.put(sb.toString(), " ");
num4 = ht.size();
}

Enumeration e = ht.keys();
int num6 = 1;
while(e.hasMoreElements()){
System.out.println(num6+ " "+e.nextElement());
num6++;
}
}

//数祖中每个值的阶乘,再乘机
public static int jieCheng(int n[]){
int sum=1;
for(int num=0;num <n.length;num++){
for(;n[num]> 0;n[num]--){
sum *= n[num];
}
}
return sum;
}
}
[解决办法]
还是递归看着舒服点...
[解决办法]
是不是要考虑一下数组数据由重复的情况,比如 int a[]=new int{2,6,2,5};

[解决办法]
using System;
using System.Collections.Generic;
using System.Text;
using System.Collections;
using System.Threading;
namespace Start
{
class Program
{
ArrayList al = new ArrayList();//N年没写JAVA了 不知道没有没有相似的类
static void Main(string[] args)
{
Program P = new Program();
P.go();
}
private void go()
{
string[] str ={ "2 ", "6 ", "7 ", "5 " };
string s = " ";
for (int l = 0; l < str.Length; l++)
{
s += str[l];
}
al.Add(s);
Start(str,0);
al.Sort();//这里排序~~
for(int j=0;j <al.Count;j++)
{
System.Console.Write(al[j].ToString());//最后输出
}
Thread.Sleep(100000);

}
private void Start(string[] str, int i)
{
for (int j = 0; j < str.Length; j++)
{
for (int k=i+1; k < str.Length; k++)
{
String temp = str[i];
str[i] = str[k];
str[k] = temp;
string s = " ";
for (int l = 0;l < str.Length; l++)
{
s += str[l];
}
if (!al.Contains(s))
{
al.Add(s);
Start(str, i);

}
}
}
}


}
}

[解决办法]
public void test() {
int a[] = new int[] { 6, 2, 5, 7 };
//排序
int minIndex = 0;
while (minIndex < a.length - 1) {
for (int i = a.length - 1; i > minIndex; i--) {
if (a[i] < a[i - 1]) {
int temp = a[i];
a[i] = a[i - 1];
a[i - 1] = temp;
}
}
minIndex++;
}
for (int i = 0; i < a.length; i++) {
System.out.print(a[i]);
}
System.out.print( "\n ");

//全排列
for (int i = 0; i < 4; i++) {
int c1 = a[i] * 1000;
for (int j = 0; j < 4; j++) {
if (j != i) {
int c2 = a[j] * 100;
for (int k = 0; k < 4; k++) {


if (k != i && k != j) {
int c3 = a[k] * 10;
for (int m = 0; m < 4; m++) {
if (m != i && m != j && m != k) {
int c4 = a[m]; System.out.print(c1 + c2 + c3 + c4 + " ");
}
}
}
}
}
}
}
}
[解决办法]
编程动力 www.bcexe.com 专业的编程开发类网站,网络编程,软件开发,网站开发,一切尽在这里!
[解决办法]
计算机编程艺术中关于组合和排列一章,有关于这种排列问题的n种解法,自己去看吧,你会大吃一惊的
[解决办法]

[解决办法]
图问题
[解决办法]
回复人:Davis129(别信自己) ( 二级(初级)) 信誉:100 2007-8-26 21:06:32 得分:0
?

还是我厉害 帮你解决了 呵呵
执行过了没问题 去买饭等了半天就有思路了:)

public class Test{
public static void main(String[] args){
int a[]={1,2,3,4};
for(int i=0;i <4;i++){
for(int j=0;j <4;j++){
if(j==i)continue;
for(int k=0;k <4;k++){
if(k==i||k==j)continue;
System.out.print(a[i]*1000+a[j]*100+a[k]*10+a[6-i-j-k]);
System.out.print( " ");
}
}
System.out.println();
}
}
}

D:\javaLX> java Test
1234 1243 1324 1342 1423 1432
2134 2143 2314 2341 2413 2431
3124 3142 3214 3241 3412 3421
4123 4132 4213 4231 4312 4321

换成a[] = { 2, 6, 7, 5 };
输出
2675 2657 2765 2756 2567 2576
6275 6257 6725 6752 6527 6572
7265 7256 7625 7652 7526 7562
5267 5276 5627 5672 5726 5762
显然错误
[解决办法]
学习下
[解决办法]
8错8错
[解决办法]
如果单要输出全排列的话,是不需要排序的
[解决办法]
递归算法,比较简单的
[解决办法]
学习下

[解决办法]
有意义吗?
现实社会中好象没有这个吧

读书读成了八股文 !腐朽,可笑!
[解决办法]
java.util
类 Arrays----sort(int[] a)
一句话完成排序!
-----------------------------
for(strRet = aStrPadd; strRet.length() < aIntScale; strRet = (new StringBuilder()).append(strRet).append(*).toString()) { }
以上是目前我认为FOR的最高效能的写法。只限于字符串。
*********************************************
将strRet = (new StringBuilder()).append(strRet).append(*).toString()
换成一个方法。写上同样的FOR代码,那么就是递归。append(*)--〉append(i)


[解决办法]
给分啊 大家这么帮你
[解决办法]
人家说现在做JAVA的很多不懂算法,莫非是真的?
这个东西在大学C基础和数据结构就应该掌握的非常好了。
[解决办法]
看贴,回贴,好习惯
public void test(String number ,String result ,int len){
//number是这个数,result结果 开始传入 " " 空字符进入, len 是这个数的长度
if(result.length()==len){


System.out.println(result);
}
else{
for(int i=0;i <number.length();i++){
if(result.indexOf(number.charAt(i)) <0){
this.test(number, result+number.charAt(i), len);
}
}
}
}
[解决办法]
都是高手
[解决办法]
佩服佩服
[解决办法]
很不错,学东西了
[解决办法]
就这么个简单的算法,要这么多人讨论,汗一个。
难道工具太好也是错?
[解决办法]
public static void main(String[] args) {

int[] a=new int[]{2,5,6,7};
int flag=0;

for(int i=0;i <a.length;i++)
{
for(int j=0;j <a.length;j++)
{
if(a[j]==a[i]) continue;
for(int k=0;k <a.length;k++)
{
if(a[k]==a[i]||a[k]==a[j]) continue;
for(int m=0;m <a.length;m++)
{
if(a[m]!=a[k]&&a[m]!=a[j]&&a[m]!=a[i])
{
System.out.print(a[i]+ " "+a[j]+ " "+a[k]+ " "+a[m]);
System.out.print( " ");
flag++;
if(flag%6==0)
{
System.out.println();
}
}
}
}
}
}
}
}


2567 2576 2657 2675 2756 2765
5267 5276 5627 5672 5726 5762
6257 6275 6527 6572 6725 6752
7256 7265 7526 7562 7625 7652
[解决办法]
有意义吗?
现实社会中好象没有这个吧

读书读成了八股文 !腐朽,可笑!
=============================

也就是无聊的时候玩玩而已!兄台何必当真
[解决办法]
学习
[解决办法]
public class Test{
public static void main(String[] args){
int a[]={2,6,7,5};
int i,j,k,temp;
for(i=0;i <4;i++)
{
if(a[i]> =a[i+1])
{
temp = a[i];
a[i] = a[i+1];
a[i+1]= temp;
}
}
for(int i=0;i <4;i++){
for(int j=0;j <4;j++){
if(j==i)continue;
for(int k=0;k <4;k++){
if(k==i||k==j)continue;
System.out.print(a[i]*1000+a[j]*100+a[k]*10+a[6-i-j-k]);
System.out.print( " ");
}
}
System.out.println();
}
}
}

[解决办法]
不会吧,这道题竟是笔试题,若是机试题(当然不能死做了,对任意长度有效)的话,也会难倒不少人的。
[解决办法]
191301587(一凡) 说的没错,换了就出错,不知道
System.out.print(a[i]*1000+a[j]*100+a[k]*10+a[6-i-j-k]);
这句的a[6-i-j-k])中的6,需要用什么公示得到,谢谢提示下
[解决办法]
数据结构,各种排序算法,最简单的冒泡,还有选择,插入,奇偶等等。
后面那个用递归比较简单,几行代码就出来了。
[解决办法]
0+1+2+3=6
[解决办法]
欢迎加入程序员群 41801837
[解决办法]
路过!
------解决方案--------------------


好帖,不能沉了
顶一下
[解决办法]
路过!

[解决办法]
飘过!!!别信自己 的 加一个排序不就好了吗??他的思路简单啊 ~~~递归看着舒服。但是太男想了。。
[解决办法]
public class Test{
public static void main(String[] args){
int a[]={1,2,3,4};
for(int i=0;i <4;i++){
for(int j=0;j <4;j++){
if(j==i)continue;
for(int k=0;k <4;k++){
if(k==i||k==j)continue;
System.out.print( " "+a[i]+a[j]+a[k]+a[6-i-j-k]);

}
}
System.out.println();
}
}
}
[解决办法]
void pailie(int *array,int n,int size)
{
if( 1 == n )
{
for(int i = size; i> 0;--i,--array)
printf( "%d ",*array);
printf( "\n ");
}
else
{
pailie(array+1,n-1,size);
for( int i = 1; i < n; ++i)
{
swap(array[0],array[i]);
pailie(array+1,n-1,size);
swap(array[i],array[0]);
}
}
}
[解决办法]
public class Lianxi
{

public static void main(String[] args)
{
int[] a = {4,2,3,1};

for(int i=0;i <a.length;i++)
{
System.out.print(a[i]+ "\t ");
}
System.out.println();

for(int i=0;i <a.length-1;i++)
{
for(int j=i+1;j <a.length;j++)
{
if(a[i]> a[j])
{
int m = a[j];
a[j] = a[i];
a[i] = m;
}
}
}

for(int i=0;i <a.length;i++)
{
System.out.print(a[i]+ "\t ");
}
System.out.println();


for(int i=0;i <a.length;i++)
{
int m=a[i]*1000;
for(int ii=0;ii <a.length;ii++)
{
if(ii!=i)
{
int mm = a[ii]*100;
for(int iii=0;iii <a.length;iii++)
{
if(iii!=ii&&iii!=i)
{
int mmm = a[iii]*10;
for(int iiii=0;iiii <a.length;iiii++)
{
if(iiii!=iii&&iiii!=ii&&iiii!=i)
{
int mmmm = a[iiii];
System.out.print(m+mm+mmm+mmmm+ "\t ");
}
}
}
}
}
}
System.out.println();
}
}
}

- -@..居然重了
[解决办法]
package com.briup.test;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

public class ArrayKinds {
public static void main(String[] args) {
//1. initialize array
int a[] = new int[]{2,6,7,5};
Arrays.sort(a);

//2. prepare list
List <String> list = new ArrayList <String> ();

//3. loop
for(int i=0; i <a.length; i++){
for(int j=0; j <a.length; j++){
if(j==i) continue;
for(int k=0; k <a.length; k++){
if(k==i || k==j) continue;
String str = " "+a[i]+a[j]+a[k]+a[6-i-j-k];
list.add(str);
}
}
}

//4. display output
System.out.println( "list size " + list.size());
for(String str : list){
System.out.println(str);


}
}
}
本程序测试通过,不过代码可复用性差,可以采用递归的思路加以改进!
[解决办法]
我是来学习的
[解决办法]
janestone..虽然我也是这样想的,但貌似有点复杂
[解决办法]
送上一个递归的算法
package com.bjjdsy.Test;

public class Test {

public static void main(String[] args) {

int a[] = { 2, 6, 7, 5 };
for (int i = 0; i < a.length - 1; i++) {
for (int j = i + 1; j < a.length; j++) {
if (a[i] > a[j]) {
int tmp = a[i];
a[i] = a[j];
a[j] = tmp;
}
}
}
System.out.println( "排序: ");
for (int i = 0; i < a.length; i++) {
System.out.print(a[i]);
System.out.print( " ");
}

System.out.println();
System.out.println();
System.out.println( "排列组合: ");
print( " ",a);
}

public static void print(String prefix, int[] a) {
if (prefix.length()==a.length-1) {
for (int i = 0; i < a.length; i++) {
if (prefix.indexOf(String.valueOf(a[i])) < 0) {
System.out.print(prefix+a[i]);
System.out.print( ", ");
}
}
} else {
if (prefix.length()==a.length-3) System.out.println();
for (int i = 0; i < a.length; i++) {
if (prefix.indexOf(String.valueOf(a[i])) < 0) {
print(prefix+a[i],a);
}
}
}
}
}

[解决办法]
import java.util.Arrays;

class testList{
public static void main(String []args){
int[] a={2,6,7,5};
int[] b=new int[a.length];
int count=0;
Arrays.sort(a);
System.out.println( "排序后-------------------- ");
for(int i=0 ; i <a.length ;i++){
b[i]=a[i];
System.out.print( " "+b[i]);
}

System.out.println();
System.out.println( "排序之中-------------------- ");
for(int i=0 ;i <b.length ;i++){
for(int j=0 ;j < b.length ;j++){
for(int k=0 ;k < b.length ;k++){
for(int l=0 ;l <b.length ;l++){
if(i==j||i==k||i==l||j==k||j==l||k==l)
continue;
System.out.print((a[i]*1000+a[j]*100+a[k]*10+a[l])+ " ");
count++;
if(count%6==0)
System.out.println();
}
}
}
}
}
}


[解决办法]
都挺厉害,以后多向大家学习
[解决办法]
这个贴不是N久以前的吗!
怎么现在又冒出来了?
CSDN是怎么把帖子浮出来的?
回帖一次上升一名?
那也不可能生到第一页的啊!
[解决办法]
看到数组就晕了。

[解决办法]
感觉一凡的代码很不错。

热点排行
Bad Request.