平淡_但不乏味 2010-10-18 11:08
浏览 208
已采纳

这个应该怎么去实现?

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

用Java
这个应该怎么写?

  • 写回答

2条回答 默认 最新

  • ayling520 2010-10-18 13:54
    关注

    [code="java"]
    public class Test8
    {
    /**
    * 排列 用1、2、2、3、4、5这六个数字,打印出所有不同的排列, 如:512234、412345等,要求:"4"
    * 不能在第三位,"3"与"5"不能相连.
    *
    * @param sb
    * 符合条件的数字
    * @param list
    * 输入的数字
    * @param index
    * 第几位
    * @param k
    * 已经用过的数组下标
    *
    * @return
    */
    public static Object a2(StringBuffer sb, String[] list, int index, String k)
    {
    String[] objs = list;

        for (int i = 0; i < objs.length; i++)
        {
    

    // int ff = 0;
    // // 是否第一次,第一次不需要判断是否用过
    // if (!k.equals("-1"))
    // {
    // String[] iss = k.split(",");
    // for (int j = 0; j < iss.length; j++)
    // {
    // // 判断该数字是否已经用过了
    // if (iss[j].equals(i + ""))
    // {
    // ff = 1;
    // break;
    // }
    // }
    // }
    // if (ff == 1)
    // {
    // // 用过的数字不能再用,重新计算
    // continue;
    // }

            sb.append(objs[i] + ",");
    
            if (list.length - 1 == index)
            {
                String[] end = sb.toString().split(",");
    
                int temp = 0;
                for (int j = 0; j < end.length; j++)
                {
                    // 3,5不能相临
                    if (j != end.length - 1 && "3".equals(end[j])
                            && "5".equals(end[j + 1]))
                    {
                        temp = 1;
                        break;
                    }
                }
                // 4不能在第3位
                if (!"4".equals(end[2]) && temp == 0)
                {
                    System.out.println(sb.toString());
                }
                sb.delete(sb.length() - 2, sb.length());
                continue;
            }
            else
            {
                a2(sb, objs, ++index, k + "," + i);
            }
            --index;
            sb.delete(sb.length() - 2, sb.length());
        }
    
        return "";
    }
    
    public static void main(String[] args)
    {
        String in = "1,2,2,3,4,5";
        String[] objs = in.split(",");
        StringBuffer sb = new StringBuffer();
        a2(sb, objs, 0, "-1");
    }
    

    }
    [/code]

    // 注释掉的的部分是为不可重复的,一个数字只能出现一次。
    // 1,2,3,4,5,6,,不会出现:1,2,3,4,5,5

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 删除虚拟显示器驱动 删除所有 Xorg 配置文件 删除显示器缓存文件 重启系统 可是依旧无法退出虚拟显示器
  • ¥15 vscode程序一直报同样的错,如何解决?
  • ¥15 关于使用unity中遇到的问题
  • ¥15 开放世界如何写线性关卡的用例(类似原神)
  • ¥15 关于并联谐振电磁感应加热
  • ¥60 请查询全国几个煤炭大省近十年的煤炭铁路及公路的货物周转量
  • ¥15 请帮我看看我这道c语言题到底漏了哪种情况吧!
  • ¥66 如何制作支付宝扫码跳转到发红包界面
  • ¥15 pnpm 下载element-plus
  • ¥15 解决编写PyDracula时遇到的问题