时间超限
他们每天都会约定加密常数n,举个例子,当n=1时,今天写的每一句话中所用的字母都会向后+1,比如:i love you就成了j mpwf zpv,当然了当是z的时候,+1就等于a。输入为多组,每组为两行。
第一行为n,−50<n<50
第二行为一句话,只有小写字母和空格。长度小于10000 ,输出加密语言
#include <stdio.h>
#include <string.h>
int main()
{
char a;
int n,i;
while(1)
{
scanf("%d",&n);
gets(a);
int sum=strlen(a);
if(n>0)
{
for(i=0;i<sum;i++)
{
if(a!=' ')
{
a=(a-'a'+26-n)%26+'a';
}
if(a==' ')
{
a=a;
}
}
}
if(n<0)
{
for(i=0;i<sum;i++)
{
if(a!=' ')
{
a=(a-'a'-n)%26+'a';
}
if(a==' ')
{
a=a;
}
}
}
for(i=0;i<sum;i++)
{
printf("%c",a);
}
printf("\n");
}
return 0;
}
这个问题需要对输入的每一行进行加密,加密的方法是将每个字母向后移动n个位置。当移动到字母表的末尾时,会循环回到字母表的开头。
以下是一个示例的Python代码,用于加密字符串:
def encrypt_string(s, n):
result = ""
for char in s:
# 判断是否是大写字母
if char.isupper():
# 将字母转换为ASCII码,并向后移动n个位置
encrypted_char = chr((ord(char) - 65 + n) % 26 + 65)
# 判断是否是小写字母
elif char.islower():
encrypted_char = chr((ord(char) - 97 + n) % 26 + 97)
else:
encrypted_char = char# 非字母字符不做处理
result += encrypted_char
return result
# 读取输入的多组测试数据
while True:
n = int(input())
if n == 0:
break
s = input()
encrypted_string = encrypt_string(s, n)
print(encrypted_string)
这段代码中,我们定义了一个`encrypt_string`函数,它接受两个参数:需要加密的字符串`s`和加密常数`n`。在函数内部,我们使用循环遍历字符串中的每个字符,并根据字符的ASCII码进行加密操作。加密后的结果存储在`result`变量中,最后返回该加密字符串。
主程序读取多组输入数据,直到输入的加密常数n为0时结束。对于每组测试数据,读取需要加密的字符串s,并调用`encrypt_string`函数进行加密操作。最后将加密后的结果打印出来。
希望这个示例能够帮助你理解问题并找到解决方案。如果还有其他问题,请随时提问!
以上回复来自 -- ChatGPT(FishC官方接口),如未能正确解答您的问题,请继续追问。 FishC_GPT 发表于 2023-11-26 12:41
这个问题需要对输入的每一行进行加密,加密的方法是将每个字母向后移动n个位置。当移动到字母表的末尾时, ...
用C语言 mamaaini 发表于 2023-11-26 12:42
用C语言
当然,以下是使用C语言编写的示例代码来解决这个问题:
#include <stdio.h>
#include <string.h>
void encryptString(char* str, int n) {
int length = strlen(str);
for(int i = 0; i < length; i++) {
if(str >= 'a' && str <= 'z') {
str = (str - 'a' + n) % 26 + 'a';
}
else if(str >= 'A' && str <= 'Z') {
str = (str - 'A' + n) % 26 + 'A';
}
}
}
int main() {
int n;
char str;
while(1) {
scanf("%d", &n);
if(n == 0) {
break;
}
getchar(); // 清除缓冲区的换行符
fgets(str, sizeof(str), stdin);
encryptString(str, n);
printf("%s", str);
}
return 0;
}
在这个示例代码中,我们定义了一个`encryptString`函数来对字符串进行加密操作。这个函数接受两个参数:需要加密的字符串`str`和加密常数`n`。在函数内部,我们使用循环遍历字符串中的每个字符,并根据字符的ASCII码进行加密操作。最后,我们在`main`函数中读取多组输入数据,直到输入的加密常数`n`为0时结束。对于每组测试数据,我们使用`fgets`函数读取需要加密的字符串`str`,然后调用`encryptString`函数进行加密操作。最后,我们使用`printf`函数打印加密后的结果。
希望这个示例能够帮助你解决问题!如果有任何其他问题,请随时提问!
以上回复来自 -- ChatGPT(FishC官方接口),如未能正确解答您的问题,请继续追问。 FishC_GPT 发表于 2023-11-26 12:42
当然,以下是使用C语言编写的示例代码来解决这个问题:
#include<stdio.h>
#include<string.h>
void lml(char*a,int n)
{
int i;
int len=strlen(a);
if(n>0)
{
for(i=0;i<len;i++)
{
if(a!=' ')
{
a=(a-'a'+26-n)%26+'a';
}
if(a==' ')
{
a=a;
}
}
}
if(n<0)
{
for(i=0;i<len;i++)
{
if(a!=' ')
{
a=(a-'a'-n)%26+'a';
}
if(a==' ')
{
a=a;
}
}
}
}
int main()
{
int n;
while(1)
{
scanf("%d",&n);
char a;
fgets(a,10001,stdin);
lml(a,n);
printf("%s\n",a);
}
return 0;
}
哪里不对 mamaaini 发表于 2023-11-26 12:57
#include
#include
void lml(char*a,int n)
{
...
抱歉,看起来你的代码截断了。请提供完整的代码,或者描述你的问题更详细一些,我会尽力帮助你解决。
以上回复来自 -- ChatGPT(FishC官方接口),如未能正确解答您的问题,请继续追问。 FishC_GPT 发表于 2023-11-26 12:57
抱歉,看起来你的代码截断了。请提供完整的代码,或者描述你的问题更详细一些,我会尽力帮助你解决。
...
#include <string.h>
int main()
{
char a;
int n,i;
while(1)
{
scanf("%d",&n);
getchar();
gets(a);
int sum=strlen(a);
if(n>0)
{
for(i=0;i<sum;i++)
{
if(a!=' ')
{
a=(a-'a'+26-n)%26+'a';
}
if(a==' ')
{
continue;
}
}
}
if(n<0)
{
for(i=0;i<sum;i++)
{
if(a!=' ')
{
a=(a-'a'-n)%26+'a';
}
if(a==' ')
{
continue;
}
}
}
puts(a);
}
return 0;
}
时间超限了怎么该 mamaaini 发表于 2023-11-26 13:25
#include
int main()
{
char a;
int n,i ...
感谢提供代码。我注意到你的代码存在一些问题。首先,你定义了一个字符变量`a`,应该使用字符数组来存储输入的字符串。其次,你在循环中使用`gets()`函数获取字符串,这个函数已经被标记为不安全的,建议使用更安全的`fgets()`函数。此外,在你的循环中,没有对输入字符串进行加密操作。
下面是修改后的代码示例:
#include <stdio.h>
#include <string.h>
void encrypt_string(char *str, int n) {
int len = strlen(str);
for (int i = 0; i < len; i++) {
if (str >= 'a' && str <= 'z') {
// 小写字母处理
str = ((str - 'a') + n) % 26 + 'a';
} else if (str >= 'A' && str <= 'Z') {
// 大写字母处理
str = ((str - 'A') + n) % 26 + 'A';
}
}
}
int main() {
int n;
char str;
while (1) {
scanf("%d", &n);
getchar();
fgets(str, sizeof(str), stdin);
int len = strlen(str);
if (str == '\n') {
str = '\0';// 去掉输入字符串末尾的换行符
}
if (n == 0) {
break;
}
encrypt_string(str, n);
printf("%s\n", str);
}
return 0;
}
在上面的示例中,我们定义了`encrypt_string`函数来进行加密操作。在循环中,我们使用`fgets()`函数获取输入的字符串,并去掉末尾的换行符。然后,我们调用`encrypt_string`函数对字符串进行加密,并打印加密后的结果。如果输入的加密常数为0,则退出循环。
希望这个示例能够帮助你解决问题。如果还有其他疑问,请随时提问。
以上回复来自 -- ChatGPT(FishC官方接口),如未能正确解答您的问题,请继续追问。
页:
[1]