一码学程10240:计算密钥

题目描述:

  互联网时代,该如何保证数据的安全性呢?这是一个大问题!!! 给数据加密,那就需要密钥对不对!! 现在呢,肖老师给你一个n和k,你需要帮肖老师计算出这个密钥。这个密钥需要满足以下条件: 1、这个密钥是只由小写字母组成的字符串 2、这个密钥长度的为n 3、这个密钥中不同字母的个数为k 4、这个密钥相邻字母不相同 5、这个密钥为所有满足条件的字符串中字典序最小。

 

输入格式
输入一行包含两个正整数n(2≤n≤1000)和k(2≤k≤26)。
 
输出格式
输出密钥字符串。
 
样例输入
样例 1
3 3
 
 
样例 2
4 2
 
样例输出
样例1 输出
abc
 
样例2输出
abab

 

思路:

  这题要求密钥的字典序最小,所以说, 我们要优先使用“a”,“b”这样的ASCLL值小的字符组成。而且,还要求相同字符不相邻,至少有k种字符,那么,我们可以得出,在前n-k个字符中,我们可以用循环的"ababab……”填充,后面则按顺序填充,这样就得出最佳密钥了。

 

代码:

#include <bits/stdc++.h>
using namespace std;
int main()
{
    int n,k;
    cin>>n>>k;
    if(n==k)
    {
        for(int i=0;i<n;i++) cout<<char(i+'a');
    }
    else 
    {
        for(int i=1;i+k-2<=n;i++)
        {
            cout<<char((i-1)%2+'a');
        }
        for(int i=1;i<=k-2;i++) cout<<char(i+'b');
    }
}

 

转载于:https://www.cnblogs.com/MaxDYF/p/9543375.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值