ï»??xml version="1.0" encoding="utf-8" standalone="yes"?>欧美一级精品,亚洲一区二区三区四区五区黄,亚洲精品播放http://www.aygfsteel.com/ldashun/zh-cnSat, 26 Jul 2025 17:40:19 GMTSat, 26 Jul 2025 17:40:19 GMT60一著名软äšg公司的java½W”试½Ž—法题的½{”案 http://www.aygfsteel.com/ldashun/archive/2009/07/27/288508.html伊莉亚斯菲尔伊莉亚斯菲尔Mon, 27 Jul 2009 01:37:00 GMThttp://www.aygfsteel.com/ldashun/archive/2009/07/27/288508.htmlhttp://www.aygfsteel.com/ldashun/comments/288508.htmlhttp://www.aygfsteel.com/ldashun/archive/2009/07/27/288508.html#Feedback0http://www.aygfsteel.com/ldashun/comments/commentRss/288508.htmlhttp://www.aygfsteel.com/ldashun/services/trackbacks/288508.html

一著名软äšg公司的java½W”试½Ž—法题的½{”案 



原题如下åQšç”¨1ã€?ã€?ã€?ã€?ã€?˜q™å…­ä¸ªæ•°å­—,用java写一个程序,打印出所有不同的排列åQŒå¦‚åQ?12234ã€?12345½{‰ï¼Œè¦æ±‚åQ?4"不能在第三位åQ?3"ä¸?5"不能相连ã€?/p>


 è§£é¢˜æ€èµ\åQ?/p>


    å¾ˆæ˜Žæ˜¾ï¼Œ˜q™æ˜¯ä¸€ä¸ªé€’å½’½Ž—法。我们可以排列将˜q?个数按从ž®åˆ°å¤§çš„™åºåºæŽ’一下,如果æ˜?,2,3,4,5,6åQŒé‚£ä¹ˆä¼šæœ?*2*3*4*5*6= 6!=720个递增的数。但如果æ˜?,2,2,3,4,5åQŒé‚£ä¹ˆåœ¨˜q?20个数中一定会有相同的数对出现åQˆç”±äºŽåœ¨˜q?个数中只有两个数两同åQŒä¹Ÿž®±æ˜¯è¯ß_¼Œå¦‚果有重复的敎ͼŒé‚£ä¹ˆä¸€å®šæ˜¯ä¸€å¯ÒŽ(gu¨©)•°åQŒå¦‚122345会出çŽîC¸¤‹Æ¡ï¼‰ã€?/p>


    æŽ’列的基本规则是分步˜q›è¡Œã€‚也ž®±æ˜¯è¯ß_¼Œè¦æŽ’列上é?个数åQŒé¦–先应该选择½W¬ä¸€ä¸ªæ•°åQŒè¿™½W¬ä¸€ä¸ªæ•°å¯ä»¥é€‰æ‹©˜q?个数中的ä»ÀL„ä¸€ä¸ªï¼Œå¦‚选择1.½W¬äºŒæ­¥æ˜¯é€‰æ‹©½W¬äºŒä¸ªæ•°åQŒè¿™½W¬äºŒä¸ªæ•°ä¸èƒ½å†é€‰æ‹©å·²ç»é€‰è¿‡çš„æ•°åQŒå¦‚1.å› æ­¤åQŒå®ƒåªèƒ½ä»ŽåŽé?个数中选择。如选择2。以此类推ã€?/p>


    æˆ‘们也可以在½E‹åºä¸­æ¨¡æ‹Ÿè¿™ä¸€˜q‡ç¨‹ã€‚源½E‹åºå¦‚下åQ?/p>


public class test1

{

    private int[] numbers = new int[]

    { 1, 2, 3, 3, 4, 5 };

    public int n;

    private String lastResult = "";


    private boolean validate(String s)

    {

        if (s.compareTo(lastResult) <= 0)

            return false;

        if (s.charAt(2) == '4')

            return false;

        if (s.indexOf("35") >= 0 || s.indexOf("53") >= 0)

            return false;

        return true;

    }


    public void list(String index, String result)

    {

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

        {

            if (index.indexOf(i + 48) < 0)

            {

                String s = result + String.valueOf(numbers[i]);

                if (s.length() == numbers.length)

                {

                    if (validate(s))

                    {

                        System.out.println(s);

                        lastResult = s;

                        n++;

                    }

                    break;

                }

                list(index + String.valueOf(i), s);

            }

        }

    }


    public static void main(String[] args)

    {

        test1 t = new test1();

        t.list("", "");

        System.out.println("æ€ÀL•°åQ? + t.n);


    }

}


    å…¶ä¸­list函数是这个算法的核心函数。index参数表示已经选择˜q‡çš„æ•ŽÍ¼Œç”¨numbers数组的烦引表½Cºã€‚如index="012"åQŒè¡¨½Cºnumbers的前三个数已¾lè¢«é€‰æ‹©åQŒä¹Ÿè¡¨ç¤ºåº”该选择½W¬å››ä¸ªæ•°äº†ï¼Œè€Œè¿™½W¬å››ä¸ªæ•°åº”该从后三个æ•îC¸­é€‰æ‹©ã€‚result参数表示临时的数字组合(˜q™ä¸ªæ•°å­—¾l„合最多是5ä¸ªæ•°å­—ï¼Œå› äØ“åQŒå¦‚果到äº?个数字,ž®Þp¡¨½Cºå·²¾læœ‰ä¸€ä¸ªç»“æžœäñ”生了åQ‰ã€‚在默认情况下indexå’Œresult的值都æ˜?"ã€?/p>


    åœ¨validate中ä‹É用了  if (s.compareTo(lastResult) <= 0)˜q›è¡Œåˆ¤æ–­åQŒç”±äºŽæŒ‰˜q™ç§æ–ÒŽ(gu¨©)³•˜q›è¡ŒæŽ’列åQŒå¦‚果这6个数是递增¾l™å‡ºçš„,那么排列的结果一定是递增的,但上˜q°çš„6个数其中½W?和第3个位¾|®ä¸Šéƒ½æ˜¯2,å› æ­¤åQŒå¦‚果出çŽîCº†ä¸Šä¸€ä¸ªç»“果不ž®äºŽå½“前¾l“果的情况,一定是有重复了åQŒå› æ­¤ï¼Œè¦å°†˜q™éƒ¨åˆ†æ•°˜q‡æ×o出去ã€?/p>


使用1, 2, 2, 3, 4, 5的测试结�/p>

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

543221

æ€ÀL•°åQ?98



使用1,2, 3, 3, 4, 5的测试结�/p>

123345

125433

132345

132543

133245

133254

133425

133452

143325

145233

152334

152343

152433

213345

215433

231345

231543

233145

233154

233415

233451

243315

245133

251334

251343

251433

312345

312543

313245

313254

313425

313452

315234

315243

315423

315432

321345

321543

323145

323154

323415

323451

325134

325143

325413

325431

331245

331254

331425

331452

331524

331542

332145

332154

332415

332451

332514

332541

341325

341523

342315

342513

343125

343152

343215

343251

345123

345132

345213

345231

413325

415233

423315

425133

431325

431523

432315

432513

433125

433152

433215

433251

451233

451323

451332

452133

452313

452331

512334

512343

512433

513234

513243

513324

513342

513423

513432

521334

521343

521433

523134

523143

523314

523341

523413

523431

541233

541323

541332

542133

542313

542331

543123

543132

543213

543231

543312

543321

æ€ÀL•°åQ?18


使用1, 3, 3, 3, 4, 5的测试结�/p>


133345

313345

315433

331345

331543

333145

333154

333415

333451

343315

345133

433315

451333

513334

513343

513433

541333

543133

543313

543331

æ€ÀL•°åQ?0


==================================================================================================================================================

另一个答案:

====================================================================================================================================================


public class DefTest 

public static boolean validate(String s) 

if (s.charAt(2) == '4') 

return false; 

if (s.indexOf("35") >= 0 || s.indexOf("53") >= 0) 

return false; 

return true; 


public static void main(String[] ssdfa) throws IllegalAccessException, InvocationTargetException, NoSuchMethodException 

cmp("","122345"); 

public static void cmp(String p,String ss) 

if(ss.length() == 1) 

if(validate(p+ss)) 

System.out.println(p+ss); 

return; 

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

if(ss.indexOf(ss.charAt(i)) == i) 

cmp(p+ss.charAt(i),ss.substring(0,i)+ss.substring(i+1, ss.length())); 


}




]]>
Ö÷Õ¾Ö©Öë³ØÄ£°å£º ÇíÖÐ| ¸Ê×ÎÏØ| ÖÓÏéÊÐ| Ç­½­Çø| Ð˹úÏØ| Ì«²ÖÊÐ| Õ´»¯ÏØ| ͬÈÊÏØ| Ì«ÆÍËÂÆì| ÇåÐÂÏØ| äü¹ØÏØ| ±¨¼Û| ÀàÎÚÆëÏØ| Îİ²ÏØ| ÁÙÕÄÏØ| Äþ°²ÊÐ| ¿ªÔ­ÊÐ| ¼ÎÒåÏØ| ¶Ø»ÍÊÐ| ±±º£ÊÐ| ÕþºÍÏØ| ´ÈÀûÏØ| º¼ÖÝÊÐ| ¼ªÂ¡ÏØ| ƽ¶ÈÊÐ| ÉîË®ˆ¶Çø| ÌïÑôÏØ| ÔªÀÊÇø| ¸ßÇàÏØ| ÂÞµéÏØ| ÖîôßÊÐ| ÅÊÖ¦»¨ÊÐ| ¼Ò¾Ó| ÐÂÃñÊÐ| ÎàÖÝÊÐ| ×ÊÔ´ÏØ| °ÍÄÏÇø| ÏóÖÝÏØ| ¶ÑÁúµÂÇìÏØ| ²¼¶û½òÏØ| ÔúÂ³ÌØÆì|