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

用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);

}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值