mamaaini 发表于 2023-11-26 12:41:20

时间超限

他们每天都会约定加密常数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;
}

FishC_GPT 发表于 2023-11-26 12:41:32

这个问题需要对输入的每一行进行加密,加密的方法是将每个字母向后移动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官方接口),如未能正确解答您的问题,请继续追问。

mamaaini 发表于 2023-11-26 12:42:06

FishC_GPT 发表于 2023-11-26 12:41
这个问题需要对输入的每一行进行加密,加密的方法是将每个字母向后移动n个位置。当移动到字母表的末尾时, ...

用C语言

FishC_GPT 发表于 2023-11-26 12:42:20

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官方接口),如未能正确解答您的问题,请继续追问。

mamaaini 发表于 2023-11-26 12:57:32

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;
}
哪里不对

FishC_GPT 发表于 2023-11-26 12:57:44

mamaaini 发表于 2023-11-26 12:57
#include
#include
void lml(char*a,int n)
{
    ...

抱歉,看起来你的代码截断了。请提供完整的代码,或者描述你的问题更详细一些,我会尽力帮助你解决。

以上回复来自 -- ChatGPT(FishC官方接口),如未能正确解答您的问题,请继续追问。

mamaaini 发表于 2023-11-26 13:25:44

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;
}
时间超限了怎么该

FishC_GPT 发表于 2023-11-26 13:26:02

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]
查看完整版本: 时间超限