Evanyou Blog 彩带

一码学程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');
    }
}

 

posted @ 2018-08-27 17:13  MaxDYF  阅读(497)  评论(1)    收藏  举报