gpt4 book ai didi

c - 错误地将 ASCII 输出为最接近的素数

转载 作者:行者123 更新时间:2023-11-30 14:47:09 25 4
gpt4 key购买 nike

Q.> 给出一个字符串(大写字母)作为输入。考虑字符串中每个字符的 ASCII 值,并将其替换为最接近的质数并打印该字符串。

例如:ABCDEF,对应的ascii为:65,66,67,68,69,70

用最接近的质数替换每个值后67,67,67,67,67,71它给出CCCCCG作为输出[注意:如果两个素数等距,请考虑较低(69 最接近 67 和 71,但考虑 67)。]

#include<stdio.h>
#include<string.h>

int closestprime(int x)
{
int primes[6]={67,71,73,79,83,89},i;
for(i=0;i<6;i++)
{
if(x<primes[i])
{
if(x<=69)
return 67;
else{
if((x-primes[i-1])>(primes[i]-x))
return primes[i];
else
return primes[i-1];
}

if (x==90||x==91)
return 89;
}
}
}

int main()
{
int i,j,cases,length;
scanf("%d%d",&cases,&length);
char *str;
str=(char *)malloc((length+1)*sizeof(char));
for(j=0;j<cases;j++){

for(i=0;i<length;i++)
{
scanf("%c",str+i);
}

for(i=0;i<length;i++)
{
str[i]=(char) closestprime((int) str[i]);
printf("%c",str[i]);
}

free(str);
printf("\n");
}
return 0;
}

这里我的代码每次在开始时都会生成一个不需要的单个“C”字符。输出应为 SCSSCC,它正在生成 CSCSSC。它还缺少最后一个 C

> 1
> 6
> TESTED
> CSCSSC

最佳答案

输入输入字符串“TESTED”后,您的程序会将“Enter”作为 \n 输入输入到输入缓冲区中。您的 scanf("%c",str+i); 正在读取 '\n' 作为输入。

您需要清除输入缓冲区。

scanf("%d%d",&cases,&length); 之后使用 fseek(stdin,0,SEEK_END);

    int i,j,cases,length;
scanf("%d%d",&cases,&length);
fseek(stdin,0,SEEK_END);
//.....

或者您也可以在 scanf("%c",str+i); 中添加一个空格

关于c - 错误地将 ASCII 输出为最接近的素数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51553391/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com