如何編碼?
Time Limit: 1000ms
Memory Limit: 65535KB
64-bit integer IO format: %lld
Java class name: MainClm高中同桌特別喜歡數學,他的QQ登陸密碼是用他的名字經過數學方法加密後得到的字符串,雖然記起來沒什麼規律,但他對於這種方法樂此不疲。他告訴clm他加密後的字符串,一臉壞笑的問“你知道我是怎樣加密的嗎?”clm想了一下並沒有直接回答,而是用他的加密方法給另一個同學的名字進行了加密,得到了一個新的密碼,從而回答了他的問題。
名字:Qin Weize
密碼:Qkr Cmsls
名字:Zhao Xiao nan
密碼:Zjeu Fsmc dsh
從以上兩個例子中學習clm的加密方法對名字進行加密。
名字:Qin Weize
密碼:Qkr Cmsls
名字:Zhao Xiao nan
密碼:Zjeu Fsmc dsh
從以上兩個例子中學習clm的加密方法對名字進行加密。
Input
第一行輸入一個整數n,接下來n行每行是一個名字,只包含大小英文字母和空格,長度不超過80個字符。
Output
對於每個名字,輸出一個經過加密的字符串,名字中大寫的字母密碼中依然大寫。
Sample Input
3 Ouyang Wuyou Hao Rongquan Li Jinyu
Sample Output
Owcgvq Iiogo Hcs Xwxseksh Lk Novig
題目大意:
給你一串字符串,然後,讓你找出其中的加密方法,對於任意輸入的一串字符,輸出這個加密後的字符串。。。
解題思路:
其實,只要寫出a-z或A-Z的對應關係,就不難看出來,這個字符的對應關係是很簡單的,我們只要對於第一個字符在其基礎上加2*(i-space)的個數就可以,
因爲space的話,不會被參加計算的,但是i的值會增加1,所以使用這個方法,就能夠很避免另外在開設一個變量了。
下來就是關於一個字符轉化成爲另外一個字符的方法了,那就是先找到一個基準,如果以前是大寫字母,就找A。如果以前是小寫字母, 就找到a。
ch = (ch-'A'+(i-space))%26+'A';
就可以將ch通過某種加密變成另外一個字符了,小寫只要把基準改爲‘a’,就可以了。
getline(cin,str);就是相當於c語言中的gets(s);因爲str中含有空格,所以就會出現這樣遇見空格就停止輸入的情況。。。
代碼:
# include<cstdio>
# include<iostream>
# include<algorithm>
# include<cstring>
# include<string>
# include<cmath>
# include<queue>
# include<stack>
# include<set>
# include<map>
using namespace std;
# define inf 999999999
string str;
int main(void)
{
int t;cin>>t;
getchar();
while ( t-- )
{
getline(cin,str);
int space = 0;
for ( int i = 0;i < str.length();i++ )
{
char ch = str[i];
char d;
if ( ch <='Z'&&ch >= 'A' )
d = 'A';
else
d = 'a';
if ( isalpha(ch) )
{
ch = ((ch-d)+(i-space)*2)%26+d;
}
if ( ch==' ' )space++;
printf("%c",ch);
}
printf("\n");
}
return 0;
}