洛谷 P1914 小书童——密码
程序员文章站
2022-03-21 07:48:54
...
思路:看起来很简单就是让字符+n,然而加的时候要注意字母最大是z,再加就再次循环所以字符 - a得到字母现在的位置再加n得到他变化后的位置,再对26取余看看他在a的基础上加了多少在 + a
方法1
#include <stdio.h>
#include <string.h>
int main()
{
int n;
int i;
char num[60];
scanf("%d %s",&n,num);
for(i = 0;i < strlen(num);i ++)
{
num[i] = (num[i] - 'a' + n) % 26 + 'a';//先来看num【i】在26(用ASCII值)个字母中的位置,在加 n,如果比z还大就开始下一轮循环所以在加a
}
for(i = 0;i < strlen(num);i ++)
{
printf("%c",num[i]);
}
return 0;
}
方法二
#include <stdio.h>
#include <string.h>
int main()
{
int n;
int i;
char num[60];
scanf("%d %s",&n,num);
/*fflush(stdin);//清除缓存,AC不通过,所以被注释了
gets(num);*/
for(i = 0;i < strlen(num);i ++)
{
if(num[i] - 'a' + n >= 26)
{
num[i] = (num[i] - 'a' + n ) % 26 + 'a';
}
else
{
num[i] = num[i] + n;
}
}
for(i = 0;i < strlen(num);i ++)
{
printf("%c",num[i]);
}
return 0;
}
//清除缓存是因为,scanf函数是以换行为结束标志,而结束标志就是字符被gets录入了那程序就出错了
//所以要清除缓存