我正在解决有关 USACO 的问题。在这个问题中,我必须将两个字符串作为输入并计算模数 47 的数值。如果值相同,则要打印 GO,否则必须打印 STAY。初始数值将通过取字母表的数值的乘积来计算(A 为 1,Z 为 26),然后使用模数计算最终数字。
我的程序正在编译,没有任何错误,第一种情况也是成功的。但问题在于第二种情况以及我的文件被附加的方式。程序如下:-
#include<stdio.h>
#include<malloc.h>
#include<string.h>
#define MAX 6
main()
{
int cal(char *ptr);
int a,b;
char *comet,*group;
FILE *fptr;
comet=malloc(6*sizeof(char));
group=malloc(6*sizeof(char));
scanf("%s",comet);
a=cal(comet);
scanf("%s",group);
b=cal(group);
fptr=fopen("ride.out","a+"); (1)
//fptr=fopen("ride.txt","a+"); (2)
if(a==b)
fprintf(fptr,"GO\n"); (3)
//printf("GO\n"); (4)
else
fprintf(fptr,"STAY\n"); (5)
//printf("STAY\n"); (6)
fclose(fptr);
return 0;
}
int cal(char *ptr)
{
int c,prod=1,mod;
while(*ptr)
{
c=(*ptr++)-'A'+1;
prod=prod*c;
}
mod=prod%47;
return mod;
}
输出:-
第一种情况是设置两个字符串:-
- COMETQ
- HVNGAT
第二种情况在错误通知本身中给出。
如果我从 (2) 中删除注释符号并将其放在 (1) 上,那么程序运行正常,因为我可以看到文件的内容,并且它们看起来就像评分系统想要的那样。(1) 的实际陈述没有发生。第 (4) 行和 (6) 行的注释也很好,但第 (1) 行不行。我无法弄清楚这一点。有什么帮助吗?