for($k=0;$k<=5;$k++){
        
            if($k+1<=5&&$k-1>=0){
                    if($newAr[$k]==3||$newAr[$k]==5){                        
                        if(($newAr[$k-1]==5||$newAr[$k-1]==3)||($newAr[$k+1]==5||$newAr[$k+1]==3)){
                            $delFlag=1;
                            break;
                        
                        }                    
                    }
            
            }
        
    }    
这个循环的判断逻辑,不是一般的乱啊……要判断3、5相连,我就直接join newAr,然后搜索35或者53这个字符串……

解决方案 »

  1.   

    //随机取得6个单元
    $rand_keys=(array_rand($str,6))如果每次结果的顺序一样就怪了
      

  2.   

    你这个题目,首先要求获得全排列,然后再套用条件:比如第三位不能为4,35不相连……关于全排列,你的算法中根本就不是全排列。靠外部循环控制总次数为6!可以,但是接下来随机取数就过分了……你的结果每次相同才奇怪呢……至于全排列的算法,我以前开发过一个利用进制来实现的例程,不过是C++的,这里列出来只是参考一下:#ifndef BaseMH
    #define BaseMHconst int MAX_BASE=62;
    const String BASE_DIGIT="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
    const int DEFAULT_LENGTH=8;
    const int DEFAULT_BASE=16;class BaseM
    {
    public:
        BaseM();
        BaseM(int Base);
        BaseM(const BaseM &aNumber);
        BaseM(long l, int Base);
        BaseM(String s, int Base);
        ~BaseM();// Operators
        BaseM& operator = (const BaseM &);
        BaseM operator + (const BaseM &);
        BaseM operator + (const int &M);
        friend ostream& operator<< (ostream& os, const BaseM &M);private:
        int _Base; // Base for the number
        int _Digits; // How many digits to store
        char * Digits; // String to store digits
        void Allocate();    long _DecValue;
    };
    //-------------------------------------------------------------
    #endif 示范代码:
    #include <vcl.h>
    #pragma hdrstop#include "BaseM.h"
    #include "Support.h"//---------------------------------------------------------------------------#pragma argsused
    int main(int argc, char* argv[])
    {
        BaseM a(12345, 16);
        BaseM b("0000", 8);for (int i=1;i<=4096;i++)
    {
        b=b+1;
        String s=FillString(b.StrPresentation(), 4, '0');
        if(StringHasDuplicate(s))
            continue;
        else
            cout<<s.c_str()<<" ";
    }return 0;
    }实际运行时,可以看到程序输出了从最小的0123到最大的7654。