为什么40分呢

P1914 小书童——凯撒密码

GYP123 @ 2022-04-18 21:36:55

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int main()
{
    char a[50];
    int i,j,n,m;
    scanf("%d",&n);
    scanf("%s",a);
    m=strlen(a);
    for(i=0;i<m;i++)
    {
        if(a[i]>='a' && a[i]<'z'-n)
        {
            a[i]+=n;
        }
        else if(a[i]='z'-n)
        {
            a[i]='a'+n;         
        }
     } 
    puts(a);
    return 0;
}

by LYqwq @ 2022-04-18 21:45:49

else if(a[i]='z'-n)

是否缺了个=

还有,a 数组建议开大点,数据范围+5或+10都行


by GYP123 @ 2022-04-18 22:12:50

@LYqwq 改了哦还是40分


by 编码落寞 @ 2022-04-19 08:27:35

@GYP123

n可能很大,所以需要取模。 编程n%26


by GYP123 @ 2022-04-19 17:00:53

@编码落寞 取了还是40分


by 编码落寞 @ 2022-04-20 08:08:20

@GYP123

你需要考虑这种情况 如果此时输入为z,那么加1,此时需要变为a,而不是ASCII加1


by GYP123 @ 2022-04-24 17:42:59

@编码落寞 你好,代码修改后得分80,求助

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<math.h>
//对字符串向后取n个大小,n若大于26,取余 
//若加的字母大于'z'的处理:我是两个if(a[i]>='a'&&a[i]-n<='z'),在字母内,外else{a[i]=n-z-a[i]+'a' } 
int main()
{
    int n,p,i;
    char a[55];
    scanf("%d",&n);
    n=n%26;
    scanf("%s",a);
    p=strlen(a);
    for(i=0;i<p;i++)
    {
        if(a[i]>='a'&&a[i]-n<='z')
        {
            a[i]=a[i]+n;
            }   
        else
        {
            a[i]=n-('z'+a[i])+'a';
        }
    }
    printf("%s",a);
    return 0;
 } 

by 编码落寞 @ 2022-04-25 08:26:15

@GYP123

 a[i]=n-('z'+a[i])+'a';

你这里应该处理有点问题。不用那么麻烦

a[i]=a[i]+n-26;

|