问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

JAVA用1、2、2、3、4、5排列组合,最多能排列多少组合并打印出来。要求:4不能放在第三位,4和5不能相连

发布网友 发布时间:2022-05-09 19:16

我来回答

5个回答

热心网友 时间:2023-10-14 15:37

算法程序题:

该公司笔试题就1个,要求在10分钟内作完。

题目如下:用1、2、2、3、4、5这六个数字,用java写一个main函数,打印出所有不同的排列,如:512234、412345等,要求:"4"不能在第三位,"3"与"5"不能相连。

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;
}

**********************************************************************

基本思路:
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 plicate 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;
}
}

热心网友 时间:2023-10-14 15:38

public class Test01 {

private int total = 0;
private ArrayList<String> arrangeList = new ArrayList<String>();
//public static void main(String[] args) {
//int sum = 0;
//for (int i = 1; i <= 100; i++) {
//if(i%2!=0){
//sum+=i;
//}
//}
//System.out.println(sum);
//}
public static void main(String[] args) {
String list[] = { "1", "2", "2", "4", "5" };
Test01 ts = new Test01();
ts.perm(list, 0, list.length-1);
for (int i = 0; i < ts.getArrangeList().size(); i++) {
System.out.println(ts.getArrangeList().get(i));
}
System.out.println("total:" + ts.total);
}

private ArrayList<String> getArrangeList() {
return arrangeList;
}

private void perm(String[] list, int k, int m) {
// TODO Auto-generated method stub
if (k > m) {
StringBuffer sb = new StringBuffer();
if(list[2]!="4" && !(list[0]=="4" && list[1]=="5") && !(list[3]=="4" && list[4]=="5")){
for (int i = 0; i <= m; i++) {

sb.append(list[i]).append(",");

}
if (sb.length()>0) {
sb.setLength(sb.length()-1);
}
arrangeList.add(sb.toString());
total++;
}
} else {
for (int i = k; i <= m; i++) {
swap(list, k, i);
perm(list, k + 1, m);
swap(list, k, i);
}
}
}

private void swap(String[] list, int k, int i) {
// TODO Auto-generated method stub
String c3 = list[k];
list[k] = list[i];
list[i] = c3;
}
}
运行结果:
1,2,2,5,4
1,2,5,4,2
1,2,5,2,4
1,2,2,5,4
1,2,5,4,2
1,2,5,2,4
1,4,2,2,5
1,4,2,5,2
1,4,2,2,5
1,4,2,5,2
1,4,5,2,2
1,4,5,2,2
1,5,2,4,2
1,5,2,2,4
1,5,2,4,2
1,5,2,2,4
2,1,2,5,4
2,1,5,4,2
2,1,5,2,4
2,2,1,5,4
2,2,5,4,1
2,2,5,1,4
2,4,2,1,5
2,4,2,5,1
2,4,1,2,5
2,4,1,5,2
2,4,5,1,2
2,4,5,2,1
2,5,2,4,1
2,5,2,1,4
2,5,1,4,2
2,5,1,2,4
2,2,1,5,4
2,2,5,4,1
2,2,5,1,4
2,1,2,5,4
2,1,5,4,2
2,1,5,2,4
2,4,1,2,5
2,4,1,5,2
2,4,2,1,5
2,4,2,5,1
2,4,5,2,1
2,4,5,1,2
2,5,1,4,2
2,5,1,2,4
2,5,2,4,1
2,5,2,1,4
4,2,2,1,5
4,2,2,5,1
4,2,1,2,5
4,2,1,5,2
4,2,5,1,2
4,2,5,2,1
4,2,2,1,5
4,2,2,5,1
4,2,1,2,5
4,2,1,5,2
4,2,5,1,2
4,2,5,2,1
4,1,2,2,5
4,1,2,5,2
4,1,2,2,5
4,1,2,5,2
4,1,5,2,2
4,1,5,2,2
5,2,2,4,1
5,2,2,1,4
5,2,1,4,2
5,2,1,2,4
5,2,2,4,1
5,2,2,1,4
5,2,1,4,2
5,2,1,2,4
5,4,2,2,1
5,4,2,1,2
5,4,2,2,1
5,4,2,1,2
5,4,1,2,2
5,4,1,2,2
5,1,2,4,2
5,1,2,2,4
5,1,2,4,2
5,1,2,2,4
total:84
速度给分,速度采纳
少了个3,自己加进去追问思路呢?

追答采纳后给思路,不解释

热心网友 时间:2023-10-14 15:38


/**
 * 1,2,2,3,4,5  4不能在第三位,3和5不能相链
 * @author 小伟
 */
public class Demo1 {
  public static void main(String[] args) {
        char[] s = {'1','2','2','3','4','5'};
          permutation(s, 0, 5);
  }
    private static void printInfo(char[] a) {
        String s = "";
        for (int i = 0; i < a.length; i++) {
            s+=a[i]+"";
        }
        String regex = "[1-5]{2}[1235][1-5]{3}";
        boolean result = s.matches(regex);
        if (result) {
            if (!(s.contains("35")||s.contains("53"))) {
                System.out.println(s);
            }
        }
    }
    public static void permutation(char[] s,int from,int to) {
        if(to <= 1)
            return;
        if(from == to) {
            printInfo(s);
        } else {
            for(int i=from; i<=to; i++) {
                swap(s,i,from); //交换前缀,使其产生下一个前缀
                permutation(s, from+1, to);
                swap(s,from,i); //将前缀换回,继续做上一个前缀的排列
            }
        }
    }
    public static void swap(char[] s,int i,int j) {
    char tmp = s[i];
        s[i] = s[j];
        s[j] = tmp;
    }
}

热心网友 时间:2023-10-14 15:39

循环遍历122345-543221 符合条件的打印
public static void main(String[] args) {
// TODO Auto-generated method stub
int su[]={1,2,2,3,4,5};
for(int i=122345;i<543221;i++){
char s[]=new Integer(i).toString().toCharArray();
int s1=0;int s2=0;int s3=0;int s4=0;int s5=0;boolean flag=true;
for(int j=0;j<s.length;j++){
if(s[j]=='1'){s1++;}
if(s[j]=='2'){s2++;}
if(s[j]=='3'){s3++;}
if(s[j]=='4'){s4++;}
if(s[j]=='5'){s5++;}
if(j!=s.length-1)
{
if(s[j]=='3'&&s[j+1]=='5'||s[j]=='5'&&s[j+1]=='3'){
flag=false;
}

}
}
if(s[2]=='4'){
flag=false;
}
if(s1==1&&s2==2&&s3==1&&s4==1&&s5==1&&flag){
System.out.println(i);
}
}

}
122345
122543
123245
123254
123425
123452
125234
125243
125423
125432
132245
132254
132425
132452
132524
132542
142325
142523
143225
143252
145223
145232
152234
152243
152324
152342
152423
152432
212345
212543
213245
213254
213425
213452
215234
215243
215423
215432
221345
221543
223145
223154
223415
223451
225134
225143
225413
225431
231245
231254
231425
231452
231524
231542
232145
232154
232415
232451
232514
232541
241325
241523
242315
242513
243125
243152
243215
243251
245123
245132
245213
245231
251234
251243
251324
251342
251423
251432
252134
252143
252314
252341
252413
252431
312245
312254
312425
312452
312524
312542
315224
315242
315422
321245
321254
321425
321452
321524
321542
322145
322154
322415
322451
322514
322541
325124
325142
325214
325241
325412
325421
341225
341252
341522
342125
342152
342215
342251
342512
342521
345122
345212
345221
412325
412523
413225
413252
415223
415232
421325
421523
422315
422513
423125
423152
423215
423251
425123
425132
425213
425231
431225
431252
431522
432125
432152
432215
432251
432512
432521
451223
451232
451322
452123
452132
452213
452231
452312
452321
512234
512243
512324
512342
512423
512432
513224
513242
513422
521234
521243
521324
521342
521423
521432
522134
522143
522314
522341
522413
522431
523124
523142
523214
523241
523412
523421
541223
541232
541322
542123
542132
542213
542231
542312
542321
543122
543212

热心网友 时间:2023-10-14 15:40

public class PermutationAlgo {
private int count = 0;

public void calculate(){
String eleStr = "122345";
depthSearch(eleStr, "");
System.out.println("符合条件的总结果数为:"+count+"条");
}

/**
* @param eleStr - 待分配字符组成的串
* @param rstStr - 已分配字符组成的串
*/
public void depthSearch(String eleStr, String rstStr) {
if (eleStr.length() == 0) {
count++;
System.out.println(rstStr);
return;
}
for (int i = 0; i < eleStr.length(); i++) {
String currEle = eleStr.substring(i, i + 1); //取出当前位的值
if (rstStr.length() == 2 && "4".equals(currEle)) continue; //剪掉第三位为4的分支
if (rstStr.endsWith("3") && "5".equals(currEle)) continue; //剪掉"35"相连的分支
if (rstStr.endsWith("5") && "3".equals(currEle)) continue; //剪掉"53"相连的分支
if (eleStr.substring(0, i).indexOf(currEle) != -1) continue; //剪掉同一位上字符重复的分支(此题即剪掉重复的2)
depthSearch(eleStr.substring(0, i) + eleStr.substring(i + 1), rstStr + currEle); //用剩余的合法串继续递归
}
}

public static void main(String[] args) {
new PermutationAlgo().calculate();
}
}
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
职工医药费计什么科目 读书郎学习平板电脑G9好吗 对高中的有用吗 冬季用空调取暖划算吗 一个朋友在 审计局工作 一直是科员 工作两年了 但想跳槽去公安 是不是... 无量涨停后大阴线洗盘? 北二外在北京怎么样? 翡翠镯子摔碎了预示什么翡翠镯子摔碎了的预示 煤炭专用网络系统折旧年限 经营煤炭公司需要购置的固定资产有哪些? 煤炭坑口属于什么固定资产 黄河现在经过安徽省还是河北省? 二分查找的递归实现 黄河经过安徽吗 pdf能编辑吗 WIN10对硬件要求比7还低怎么运行起来比7还卡呢,硬件占用率还傻高 win10监视器硬件加速 我想去朝鲜生活怎么样?在那生活如何? 朝鲜人的生活是什么样的 衣食住行全免费?朝鲜的分配制,具体是一种什么样的制度? 现在的朝鲜,如同八九十年代的中国,朝鲜人的真实生活怎么样? 课文出自史记,被鲁迅先生称为什么 《史记》被鲁迅先生成为 《史记》被鲁迅评价为 有限责任公司资本不必划为等额股份,其中划为不等额股份是什么意思? 【我真感谢他】作文 400字 400字作文 春节期间最想感谢的一个人 我要感谢的一个人 作文,写同学 全命题 400字以上 高中作文400字 我最想感谢的人 不要抄袭 发给我 我要感谢她作文400-500字 我要感谢的人作文400字开头结尾要有修辞 求解JAVA题 请C++的高手帮我设计一下这个程序,绝对高分悬赏!! C语言编程题,用指针,不用函数讲一个3*3矩阵转置 长江黄河穿过哪几个省? 温控表 TDW2001 电路图 找图的功能用C或C++的实现方法 火龙果怕冻吗? 东芝变频器刹车时间怎么调 VC610变频器刹车怎么调 三菱f800变频器刹车参数设置 dnf中buff强化怎么弄 获得buff强化效果怎么完成 笔记本强冷系统怎么开启 中宏变频器启动慢还没有刹车怎么调参数 高中课程自学网好不好? 勤学网好还是自学网好 360管家诺基亚5310电子书软件怎么下 LG KS360怎么看电子书 阅读器怎么下载 广电机顶盒 电信机顶盒 安卓机顶盒 电脑 。这几个看影音各有什么不同 黄豆酱的嗮制方法?