HDOJ1287_破譯密碼

一道正常簡單題php

曲折解題

作這題的時候看了好久沒有看懂是什麼意思,最後覺得是一道單獨的數學題把B這個大寫字母猜出來進行異或運算,還不知道C裏面異或運算能夠直接有符號的:),致使又去學習了一下十進制轉換成二進制(是的,這個都忘記了)。最後仍是沒有解出來,看題解以後本身打了一遍。函數

HDOJ1287_破譯密碼學習

#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#include<string.h>
#include<ctype.h>

int main()
{
    int num[10000],i,j,n,x;
    while(scanf("%d",&n)!=EOF)
    {
        for(i=1;i<=n;i++)
        {
            scanf("%d",&num[i]);
        }
    
        //對A~Z裏的全部的數字進行試探,判斷是否爲加密的那個大寫字母。 
        for(i=0;i<26;i++)
        {
            for(j=1;j<=n;j++)
            {
                if(!isupper(('A'+i)^num[j]))
                {
                    break;
                }
            }
            if(j==n+1)
            {
                x='A'+i;
                break; 
            }
        }
    
        for(i=1;i<=n;i++)
        {
            printf("%c",x^num[i]);
        }
        printf("\n");
    }
    
    return 0;
}

思路

使用試探法,對每一組輸入的數據進行試探,找出其用來的異或運算的大寫字母,而後與輸入密文進行異或進行輸出。加密

收穫

  1. ctype頭文件中有isupper判斷是不是大寫字母的函數能夠直接調用。
  2. C語言中進行異或運算能夠直接使用符號「^」。
  3. for循環中能夠直接使用for(i='A';i<'Z;i++),這個不常用,可是須要記住這樣使用是沒有問題的。
  4. 複習十進制轉換成二進制使用迭代除2的方法。
相關文章
相關標籤/搜索