全排列

从n个不同元素中任取m(m≤n)个元素,按照一定的顺序排列起来,叫做从n个不同元素中取出m个元素的一个排列。当m=n时所有的排列情况叫全排列。

 

至于如何用代码实现, 我分了两种情况

1. 在这 n 个元素中不存在相同元素

2. 在这 n 个元素中存在相同元素

 

#include <iostream>    // 不含相同元素的全排列 
#include <cstdio>
#include <algorithm>
#include <cstring>
using namespace std;
char str[10];

void solve(char *str_begin, char *str_end)
{
//    sort(str, str+strlen(str));
//    puts(str);
    if(*str_end == '\0')
    {
        puts(str_begin);
    }
    
    else{
        for(char *tstr = str_end; *tstr != '\0'; tstr++)
        {
                swap(*str_end, *tstr);
                solve(str_begin, str_end+1);
                swap(*str_end, *tstr);
        }
    }
}
/*
void Permutation(char* pStr, char* pBegin)
{
//    assert(pStr && pBegin);

    if(*pBegin == '\0')
        printf("%s\n",pStr);
    else
    {
        for(char* pCh = pBegin; *pCh != '\0'; pCh++)
        {
            swap(*pBegin,*pCh);
            Permutation(pStr, pBegin+1);
            swap(*pBegin,*pCh);
        }
    }
}
*/
int main()
{
    gets(str);
    solve(str, str);
    puts("");
//    Permutation(str, str);
    
    return 0;
}

 

下面是含有相同元素的全排列

#include <iostream>    // 含相同字符的字符串全排列
#include <cstring>
#include <algorithm>
#include <cstdio>
using namespace std;

char str1[10], str2[10];
int len;

void solve(char *d, char *s, int i)
{
    char t;
    for(int j = 0; j< len; j++)
    {
        if(j> 0 && s[j] == s[j-1])
            continue;
        else if(s[j] != '#'){
            d[i] = s[j];
            t = s[j];
            s[j] = '#';
            if(i == len-1){
                d[len] = '\0';
                puts(d);
            }
            else{
                solve(d, s, i+1);
            }
            s[j] = t;
        }
    }
}

int main()
{
    gets(str1);
    len = strlen(str1);
    sort(str1, str1+len);
//    puts(str1);
    solve(str2, str1, 0);

    return 0;
}

 

"Mstar Bin Tool"是一款专门针对Mstar系列芯片开发的固件处理软件,主要用于智能电视及相关电子设备的系统维护与深度定制。该工具包特别标注了"LETV USB SCRIPT"模块,表明其对乐视品牌设备具有兼容性,能够通过USB通信协议执行固件读写操作。作为一款专业的固件编辑器,它允许技术人员对Mstar芯片的底层二进制文件进行解析、修改与重构,从而实现系统功能的调整、性能优化或故障修复。 工具包中的核心组件包括固件编译环境、设备通信脚本、操作界面及技术文档等。其中"letv_usb_script"是一套针对乐视设备的自动化操作程序,可指导用户完成固件烧录全过程。而"mstar_bin"模块则专门处理芯片的二进制数据文件,支持固件版本的升级、降级或个性化定制。工具采用7-Zip压缩格式封装,用户需先使用解压软件提取文件内容。 操作前需确认目标设备采用Mstar芯片架构并具备完好的USB接口。建议预先备份设备原始固件作为恢复保障。通过编辑器修改固件参数时,可调整系统配置、增删功能模块或修复已知缺陷。执行刷机操作时需严格遵循脚本指示的步骤顺序,保持设备供电稳定,避免中断导致硬件损坏。该工具适用于具备嵌入式系统知识的开发人员或高级用户,在进行设备定制化开发、系统调试或维护修复时使用。 资源来源于网络分享,仅用于学习交流使用,请勿用于商业,如有侵权请联系我删除!
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值