qfmy1838 2023-09-16 21:54 采纳率: 100%
浏览 24
已结题

C语言相关的练习断手之作

真不会写(写了一天结果不对,哭了)(编是编好了,但结果很奇怪,然后我的变量命名和代码太乱了,就不发了)

img

img

这是题目给的密钥:

unsigned char password[70]={71,114,101,97,116,32,105,100,101,97,108,32,98,117,116,32,116,104,114,111,117,103,104,32,115,101,108,102,108,101,115,115,32,115,116,114,117,103,103,108,101,32,97,110,100,32,115,97,99,114,105,102,105,99,101,32,116,111,32,97,99,104,105,101,118,101,46};`

这是例子:

//输入
9 23 19 132 6 192 6 27 10 15 13 94 29 14 3 69 4 17 29 18 73 18 24 78
201 172 222 239 206 5 254 237 221 207 172 20 252 61 206 188 21 175 253 254 68 190 126 215
3

//输出
78 101 118 101 114 32 103 111 110 110 97 32 103 105 118 101 32 121 111 117 32 117 112 46
  • 写回答

5条回答 默认 最新

  • 忧伤的玩不起 2023-09-17 21:27
    关注
    
    #include<stdio.h>
    #include<stdlib.h>
    int getNumberCount(int number){
        int index =0;
        while(number >0){
            number = number >> 1;
            index++;
        }
    
        return 1 << (index - 1);
    }
    
    unsigned char numberLeftMove( unsigned char number, int numberCount, int loopMoveCount)
    {
        unsigned char retNumber = number;
        for(int i = 0; i < loopMoveCount; i++){
            if((retNumber & numberCount) > 0){
                retNumber = ((retNumber^numberCount)  << 1) + 1;
            }else{
    
                retNumber = retNumber << 1;
            }
    
        }
        return retNumber;
    }
    
    unsigned char numberRightMove( unsigned char number, int numberCount, int loopMoveCount)
    {
        unsigned char retNumber = number;
        for(int i = 0; i < loopMoveCount; i++){
            if((retNumber & 1) > 0){
                retNumber = (retNumber >> 1) | numberCount;
            }else{
    
                retNumber = retNumber >> 1 ;
            }
        }
        return retNumber;
    }
    int main() {
        unsigned char password[71] = {71,114,101,97,116,32,105,100,101,97,108,32,98,117,116,32,116,104,114,111,117,103,104,32,115,101,108,102,108,101,115,115,32,115,116,114,117,103,103,108,101,32,97,110,100,32,115,97,99,114,105,102,105,99,101,32,116,111,32,97,99,104,105,101,118,101,46};
        unsigned char SecretLetters[71] = {0}; //密函
        unsigned char annex[71] = {0}; //附件
        int loopMoveCount = 0;  //循环位移数
        int secreCount = 0; //密函长度
        int annexCount = 0; //附件长度
        char endChar;
        int  i;
        int  numberCount = 0;
        while(1){
            scanf("%hhu%c", &SecretLetters[secreCount++], &endChar);
            if(endChar == '\n'){
                break;
            }
        }
        while(1){
            scanf("%hhu%c", &annex[annexCount++], &endChar);
            if(endChar == '\n'){
                break;
            }
        }
        scanf("%d", &loopMoveCount);
        for (i = 0; i < secreCount; i++) {
            SecretLetters[i] ^= password[i];
        }
        for (i = 0; i < annexCount; i++) {
            numberCount = getNumberCount(annex[i]);
            if(loopMoveCount>0){
                annex[i] = numberLeftMove(annex[i], numberCount, loopMoveCount);
            }
            else {
                annex[i] = numberRightMove(annex[i], numberCount,-loopMoveCount);
            }
        }
         for (i = 0; i < secreCount; i++) {
            SecretLetters[i] = SecretLetters[i] & annex[i];
            if(i > 0){
                printf(" ");
            }
            printf("%hhu", SecretLetters[i]);
        }
        return 0;
    }
    /*
    9 23 19 132 6 192 6 27 10 15 13 94 29 14 3 69 4 17 29 18 73 18 24 78
    201 172 222 239 206 5 254 237 221 207 172 20 252 61 206 188 21 175 253 254 68 190 126 215
    3
    */
    

    img

    看看我的亲测有效,希望有什么问题可以私聊我

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(4条)

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 9月18日
  • 已采纳回答 9月17日
  • 赞助了问题酬金15元 9月17日
  • 创建了问题 9月16日

悬赏问题

  • ¥15 加装宝马安卓中控改变开机画面
  • ¥15 STK安装问题问问大家,这种情况应该怎么办
  • ¥15 更换了一个新的win10系统,再下载VS时碰到的问题,是C++组件的?
  • ¥15 关于罗技鼠标宏lua文件的问题
  • ¥15 halcon ocr mlp 识别问题
  • ¥15 已知曲线满足正余弦函数,根据其峰值,还原出整条曲线
  • ¥20 无法创建新的堆栈防护界面
  • ¥15 sessionStorage在vue中的用法
  • ¥15 wordpress更换域名后用户图片头像不显示
  • ¥15 如何在ubunto上安装CEF (Chromium Embedded Framework),并且基于qt实现打开一个web