C语言 密码生成

本题要求实现一个递归函数,生成给定字符集合内所有的n位密码,要求密码的相邻字符不同。例如,给定字符集合为1A2B,所有符合要求的2位密码为1A 12 1B A1 A2 AB 21 2A 2B B1 BA B2

函数接口定义:

void generatePasswords(char *characters, int n);

其中,characters是用户输入的字符集合,n是密码长度(n>1),可增加递归函数实现上述功能。

裁判测试程序样例:

#include <stdio.h>

void generatePasswords(char *characters, int n);

int main()
{
  int n;
  char characters[256];
  scanf("%s %d", characters, &n);
  generatePasswords(characters, n);
  return 0;
}

/* 请在这里填写答案 */

输入样例:

ABC# 3

输出样例:

ABA
ABC
AB#
ACA
ACB
AC#
A#A
A#B
A#C
BAB
BAC
BA#
BCA
BCB
BC#
B#A
B#B
B#C
CAB
CAC
CA#
CBA
CBC
CB#
C#A
C#B
C#C
#AB
#AC
#A#
#BA
#BC
#B#
#CA
#CB
#C#

以下为代码:

void generatePasswordsRec(char *Sofar, int next, char *characters, int former, int n);

void generatePasswords(char *characters, int n)
{
    char Sofar[256] = {'\0'};
    generatePasswordsRec(Sofar, 0, characters, -1, n);
}

void generatePasswordsRec(char *Sofar, int next, char *characters, int former, int n)
{
    int i;
    
    if(n == 0)
        printf("%s\n", Sofar); //递归出口,输出字符串
    else
    {
        for(i = 0; characters[i]; i++)
        {
            if(former == i)
                continue; //相邻相等进入下一个循环
            else{
                Sofar[next] = characters[i];
                generatePasswordsRec(Sofar, next+1, characters, i, n - 1); //迭代
            }
        }
    }
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值