1. 程式人生 > >ACM 1171

ACM 1171

為使電文保密,往往按照一定的規律將其轉換成密碼,
收報人再按照約定的規律將其譯成原文。例如,
某次發報時採用的密碼規律為:
將字母A變成字母E,a變成e,即變成其後的第4個字母,
W(w)變成A(a),X(x)變成B(b), Y(y)變成C©,Z(z)變成D(d),
其規律如下圖所示:
字母按照此規律轉換,非字母字元保持原狀不變,如:
China!按此規律將轉換為Glmre!
要求從鍵盤輸入一行字元,輸出其相應的密碼。
輸入 可以包含空格等特殊符號的一行字元(以回車結束)。
輸出 加密後的字元序列,末尾輸出換行。
樣例輸入 China!

譚浩強c紅寶書解法 但是這種解法在一些判定裡會顯示輸出超限

#include<stdio.h>
int main()
{
    char c;
    c= getchar();                                 //取值字元
    while (c!='\n')                               //當沒有輸出換行符,也就是沒打空格時,可以一直輸入這個
    {   if (c>='a'&&c<='z'||(c>='A'&&c<='Z'))     //當c時字母時
        {
        if(c>='a'&&c<='v'||c>='A'&&c<='A') c=c+4; //當c屬於a~v區間時,其ascii碼+4,即可實現變換
        else  c=c-22;                             //當c屬於w~y區間時,其ASCII碼需要減22才能達到要求,否則會變成其他字元,詳情看後邊的ascii碼錶
        }
        printf("%c",c);                           //輸出
        c=getchar();                              //繼續取字元
    }
    printf("\n");
    return 0;
}

簡單粗暴解法

#include<stdio.h>
int main()
{
    char c;
    while(scanf("%c",&c)!=EOF)                                 //不斷取值就使用(!=EOF)這個條件
    { 
        if ((c>='A'&&c<'W')||(c>='a'&&c<='w')) c=c+4;           //條件一定得是字母,所以if和else if都加了條件
        else if ((c>='W')&&(c<='Z')&&(c>='w'&&c<='z'))c=c-22;
        printf("%c",c);
    }
    printf("\n");
    return 0;

}