鱼C论坛

 找回密码
 立即注册
查看: 976|回复: 7

时间超限

[复制链接]
发表于 2023-11-26 12:41:20 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
他们每天都会约定加密常数n,举个例子,当n=1时,今天写的每一句话中所用的字母都会向后+1,比如:i love you就成了j mpwf zpv,当然了当是z的时候,+1就等于a。

输入为多组,每组为两行。

第一行为n,&#8722;50<n<50

第二行为一句话,只有小写字母和空格。长度小于10000 ,输出加密语言
#include <stdio.h>
#include <string.h>
int main()
{
    char a[10001];
    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[i]!=' ')
                {
                    a[i]=(a[i]-'a'+26-n)%26+'a';
                }
                if(a[i]==' ')
                {
                    a[i]=a[i];
                }
            }
        }
        if(n<0)
        {
            for(i=0;i<sum;i++)
            {
                if(a[i]!=' ')
                {
                    a[i]=(a[i]-'a'-n)%26+'a';
                }
                 if(a[i]==' ')
                {
                    a[i]=a[i];
                }
            }
        }
        for(i=0;i<sum;i++)
        {
            printf("%c",a[i]);
        }
        printf("\n");
    }
    return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 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官方接口),如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

用C语言
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-11-26 12:42:20 | 显示全部楼层

当然,以下是使用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[i] >= 'a' && str[i] <= 'z') {            str[i] = (str[i] - 'a' + n) % 26 + 'a';        }        else if(str[i] >= 'A' && str[i] <= 'Z') {            str[i] = (str[i] - 'A' + n) % 26 + 'A';        }    }}int main() {    int n;    char str[100];        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官方接口),如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 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[i]!=' ')
                {
                    a[i]=(a[i]-'a'+26-n)%26+'a';
                }
                if(a[i]==' ')
                {
                    a[i]=a[i];
                }
            }
        }
        if(n<0)
        {
            for(i=0;i<len;i++)
            {
                if(a[i]!=' ')
                {
                    a[i]=(a[i]-'a'-n)%26+'a';
                }
                 if(a[i]==' ')
                {
                    a[i]=a[i];
                }
            }
        }
}
int main()
{
    int n;
    while(1)
    {
        scanf("%d",&n);
       char a[10001];
        fgets(a,10001,stdin);
        lml(a,n);
        printf("%s\n",a);
    }
    return 0;
}
哪里不对
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-11-26 12:57:44 | 显示全部楼层
mamaaini 发表于 2023-11-26 12:57
#include
#include
void lml(char*a,int n)
{
    ...

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

以上回复来自 -- ChatGPT(FishC官方接口),如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-11-26 13:25:44 | 显示全部楼层
FishC_GPT 发表于 2023-11-26 12:57
抱歉,看起来你的代码截断了。请提供完整的代码,或者描述你的问题更详细一些,我会尽力帮助你解决。

...

#include <string.h>
int main()
{
    char a[10001];
    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[i]!=' ')
                {
                    a[i]=(a[i]-'a'+26-n)%26+'a';
                }
                if(a[i]==' ')
                {
                    continue;
                }
            }
        }
        if(n<0)
        {
            for(i=0;i<sum;i++)
            {
                if(a[i]!=' ')
                {
                    a[i]=(a[i]-'a'-n)%26+'a';
                }
                 if(a[i]==' ')
                {
                    continue;
                }
            }
        }
        puts(a);
    }
    return 0;
}
时间超限了怎么该
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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[i] >= 'a' && str[i] <= 'z') {            // 小写字母处理            str[i] = ((str[i] - 'a') + n) % 26 + 'a';        } else if (str[i] >= 'A' && str[i] <= 'Z') {            // 大写字母处理            str[i] = ((str[i] - 'A') + n) % 26 + 'A';        }    }}int main() {    int n;    char str[100];    while (1) {        scanf("%d", &n);        getchar();        fgets(str, sizeof(str), stdin);        int len = strlen(str);        if (str[len - 1] == '\n') {            str[len - 1] = '\0';  // 去掉输入字符串末尾的换行符        }        if (n == 0) {            break;        }        encrypt_string(str, n);        printf("%s\n", str);    }    return 0;}
在上面的示例中,我们定义了`encrypt_string`函数来进行加密操作。在循环中,我们使用`fgets()`函数获取输入的字符串,并去掉末尾的换行符。然后,我们调用`encrypt_string`函数对字符串进行加密,并打印加密后的结果。如果输入的加密常数为0,则退出循环。

希望这个示例能够帮助你解决问题。如果还有其他疑问,请随时提问。

以上回复来自 -- ChatGPT(FishC官方接口),如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-10-5 07:16

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表