米鼠商城

多快好省,买软件就上米鼠网

最新项目

人才服务

靠谱的IT人才垂直招聘平台

Day16:加密 C++实现

  • DDAlex
  • 9
  • 2019-05-01 20:42

给定一个整数n,之后有n个字符串。针对每个字符串,将数据6个为一组分组,最后一组可能不满6个。比如”huazhongU”,将其分为”huazho” “ngU”,求出6个数字,每个数字分别为对应位置上的字母ASCII码的和。比如’h’ + ‘n’ = 214,’u’ + ‘g’ = 220,得到如下6个数字:214, 220, 182, 122, 104, 111。

之后,针对每个数字,按照数位求和,如果求和结果超过一位,重复执行这个过程直到结果仅为1位。如 ‘a’ + ‘U’ = 182 => 1 + 8 + 2 = 11 => 1 + 1 = 2。对6个数字分别操作结果即位最后的密码。

注意,每个字符串可能有任意长。

样例输入:

2
huazhongU
shangjiaoU

样例输出:

742553
431647

求解代码:

#include <bits/stdc++.h>

using namespace std;

//取各数位之和  运用了递归的思想
int getnumber(int a){
    int f = 0;
    while(a > 0){
        f += a % 10;
        a /= 10;
    }
    if(f < 10)
        return f;
    return getnumber(f);
}


void getans(string s[],int all){
    //加密后的数组最多6位  因此建立一个长度为6的数组
    int pswd[6];
    for(int i = 0; i < 6; i ++)
        pswd[i] = 0;
    for(int i = 0; i < 6; i ++){
        for(int j = 0; j < all-1; j ++){
            //取各位的ASCII码
            pswd[i] += s[j][i];
        }
    }
    for(int i = 0; i < s[all-1].size(); i ++)
        //最后一组长度可能不足6
        pswd[i] += s[all-1][i];

    for(int i= 0; i < s[0].size(); i ++)
        cout << getnumber(pswd[i]) ;
    cout << endl;
}

int main(){
    int n;
    cin >> n;
    while(n--){
        string str; cin >> str;
        int len = str.size();
        int all;
        if(len % 6 == 0)
            all = len / 6;
        else all = len / 6 + 1;
        string s[all];
        int k= 0;
        for(int i = 0; i < all ; i ++){
            for(int j = 0; j < 6; j ++){
                if(k < len)
                    s[i] += str[6*i+j];
                k++;
            }
        }
        getans(s,all);
    }
    return 0;
}

 



这里给大家推荐一个在线软件复杂项交易平台:米鼠网 https://www.misuland.com

米鼠网自成立以来一直专注于从事软件项目人才招聘软件商城等,始终秉承“专业的服务,易用的产品”的经营理念,以“提供高品质的服务、满足客户的需求、携手共创双赢”为企业目标,为中国境内企业提供国际化、专业化、个性化、的软件项目解决方案,我司拥有一流的项目经理团队,具备过硬的软件项目设计和实施能力,为全国不同行业客户提供优质的产品和服务,得到了客户的广泛赞誉。



如有侵权请联系邮箱(service@misuland.com)

猜你喜欢

评论留言