您的位置:首页 > 大数据 > 人工智能

用1、2、2、3、4、5这六个数字,写一个main函数,打印出所有不同的排列

2014-07-09 19:30 399 查看
用1、2、2、3、4、5这六个数字,写一个main函数,打印出所有不同的排列,如:512234、412345等

要求:"4"不能在第三位,"3"与"5"不能相连.

此题目和此前一个博客类似(里面有详细解释),只是加上一个过滤函数排除不需要的就可以了。

#include<iostream.h>

bool IsValid( char *str )//过滤函数
{
for( int i=1; *(str+i) != '\0'; i++ )
{
if( i == 2 && *(str+i) == '4' )
return false;

if( *(str+i) == '3' && *(str+i-1) == '5' ||	*(str+i) == '5' && *(str+i-1) == '3' )
return false;
}
return true;
}
bool repeatnumber(char *bg,char *pch)
{
    bool f=false;
    for(char *q=bg;q!=pch;q++)
        if(*q==*pch)
        {
            f=true;
            break;
        }
    return f;
}
void pailie(char *ch,char *bg)
{

if(*bg=='\0')
        cout<<ch<<endl;
    else
    {    
        char tmp;
        for(char *pch=bg;*pch!='\0';pch++)
        {
        
            /*为了防止字符串中有相同的字符而造成排除的序列一样
            而设置repeatnumber()函数进行检查,从bg到pch-1中间是不是
            有和pch相同的字符,如果有就说明已经和前面的bg互换完成
            不需要继续互换否则就会重复直接下一步

            */
            
            if(bg!=pch&&repeatnumber(bg,pch))
                continue;

            tmp = *bg;
            *bg = *pch;//开始这里面一直报错,错误原因如下图,感谢csdn网友Fire_Lord的帮助
            *pch = tmp;
        
            sequence(ch,bg+1);
        
            tmp = *bg;
            *bg = *pch;
            *pch = tmp;
        }
    }
}

void main()
{
char ch[]="122345";
pailie(ch,ch);

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐