<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    posts - 0, comments - 77, trackbacks - 0, articles - 356
      BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

    一道java算法題

    Posted on 2007-03-14 11:09 semovy 閱讀(327) 評論(0)  編輯  收藏 所屬分類: JAVA基礎
    網上看到一道java算法題,題目如下: 用1,2,2,3,4,5,這六個數字,用java寫一個main函數,打印出所有不同的排列,如:512234,412345等,要求:“4”不能排第3位,“1”與“5”不能相連。
    ??? 我的解題思路是這樣的:這是一個典型的遍歷題型,可以用遞歸實現。在每一次遞歸中,要解決的問題包括,“4”不能排第3位,“1”與“5”不能相連,“2”的個數最多為2個且要保證不能重復,其他數字也要不重復。最難解決的就是要使“2”不重復,我假定兩個2的順序不變,也就是在排列組合中兩個2始終保持一種出現順序,這樣就不會重復。其他的約束看一下注釋就可以明白了。網上有個使用圖的解法,盡管很有創意,但原理性差不多,而使用TreeSet的方法頗讓人跌眼鏡。Java代碼如下:
    package?test;

    /**
    ?*?用1,2,2,3,4,5,這六個數字,用java寫一個main函數,打印出所有不同的排列,如:512234,412345等,要求:“4”不能排第3位,“1”與“5”不能相連。
    ?*?
    @author?kafka0102
    ?*
    ?
    */

    public?class?ATest?{

    ????
    private?static?boolean?is1Or5(char?a,char?b){
    ????????
    if(a=='1'?&&?b=='5')return?true;
    ????????
    if(a=='5'?&&?b=='1')return?true;
    ????????
    return?false;
    ????}

    ????
    ????
    private?static?int?countOf2(char[]?num,int?index){
    ????????
    int?n=0;
    ????????
    for(int?i=0;i<index;i++){
    ????????????
    if(num[i]=='2')n++;
    ????????}

    ????????
    return?n;
    ????}

    ????
    ????
    private?static?boolean?hasSameNumber(int?index,char?a,?char[]?num){
    ????????
    for(int?i=0;i<index;i++){
    ????????????
    if(num[i]==a)return?true;
    ????????}

    ????????
    return?false;
    ????}

    ????
    ????
    public?static?int?testArrange(char[]?number,char[]?num,int?index){
    ????????
    int?size?=?0;//組合的個數
    ????????int?pos1=1,pos2=2;//該變量為重復的2的數組位置,可以提取出來作為參數
    ????????int?emp?=?countOf2(num,index);//得到當前的數組中有幾個2
    ????????for(int?i=0;i<num.length;i++){
    ????????????
    if(number[i]=='2'){//當前的數字為2
    ????????????????if(emp?>=?2){//數組中2的個數多于2個
    ????????????????????continue;
    ????????????????}
    else?if(emp?==?1){//數組中有一個2時,要求當前的2不能為位置1的2
    ????????????????????if(i==pos1)continue;
    ????????????????}
    else{
    ????????????????????
    if(i==pos2)continue;//數組中沒有2時,要求當前的2不能為位置2的2
    ????????????????}

    ????????????}
    else{
    ????????????????
    if(index==2?&&?number[i]=='4')continue;//去除4
    ????????????????if(index>0?&&?is1Or5(num[index-1],number[i]))continue;//去除相鄰的1和5
    ????????????????if(hasSameNumber(index,number[i],?num))continue;//去除重復數字
    ????????????}

    ????????????num[index]?
    =?number[i];
    ????????????
    if(index==5){
    ????????????????System.out.println(num);
    ????????????????size
    ++;
    ????????????}
    else{
    ????????????????size?
    =?size?+?testArrange(number,num,index+1);
    ????????????}

    ????????}

    ????????
    return?size;
    ????}

    ????
    ????
    public?static?void?aTest(){
    ????????
    char[]?number?=?{'1','2','2','3','4','5'};
    ????????
    char[]?num?=?new?char[number.length];
    ????????
    int?size?=0;
    ????????size?
    =?testArrange(number,num,0);
    ????????System.out.println(
    "size="+size);
    ????}

    ????
    ????
    public?static?void?main(String[]?args)?{
    ????????aTest();
    ????}


    }

    主站蜘蛛池模板: 丁香花免费高清视频完整版| 国产猛男猛女超爽免费视频| 亚洲精品视频在线播放| 中文字幕一区二区三区免费视频| 99热这里只有精品6免费| 日韩精品免费电影| 亚洲精华国产精华精华液网站| 无码永久免费AV网站| 亚洲 日韩经典 中文字幕| 亚洲精品无播放器在线播放| 成年女人免费视频播放体验区| 中文字幕亚洲综合久久菠萝蜜| 成年大片免费高清在线看黄| 超清首页国产亚洲丝袜| 亚洲毛片免费观看| 四虎永久在线观看免费网站网址| 国产成人精品久久亚洲高清不卡 | 久久水蜜桃亚洲av无码精品麻豆| 久久久久久成人毛片免费看 | 在线播放免费人成视频在线观看| 伊人久久五月丁香综合中文亚洲 | 99久久99热精品免费观看国产 | 两性色午夜免费视频| 国产V亚洲V天堂无码| 综合偷自拍亚洲乱中文字幕| 免费乱码中文字幕网站| 中国极品美軳免费观看| 亚洲日本中文字幕区| 妞干网手机免费视频| 香蕉视频在线观看免费| 狠狠色伊人亚洲综合成人| 免费福利视频导航| 免费很黄无遮挡的视频毛片| 日本高清免费aaaaa大片视频| 美女啪啪网站又黄又免费| 亚洲人成网77777亚洲色| 99精品国产免费久久久久久下载 | 五月天婷亚洲天综合网精品偷| 中文字幕亚洲精品无码| 免费大片在线观看网站| 久久精品视频免费看|