USACOの問題を解決しています。この問題では、2つの文字列を入力として受け取り、47を法とする数値を計算する必要があります。値が同じ場合はGOが出力され、そうでない場合はSTAYが出力されます。最初の数値はアルファベットの数値(Aの場合は1、Zの場合は同様に26)の積をとって計算され、最後の数値はモジュロを使用して計算されます。
私のプログラムはエラーなしでコンパイルされており、私のコンピューターで正常に実行されています。ただし、グレーダーコンピュータによる実行エラーとしてセグメンテーション違反が表示されています。プログラムと出力は次のとおりです。-
プログラム:-
#include<stdio.h>
#include<string.h>
main()
{
int cal(char *ptr);
char *comet,*group;
int a,b;
scanf("%s",comet);
a=cal(comet);
scanf("%s",group);
b=cal(group);
if(a==b)
printf("GO");
else
printf("STAY");
return 0;
}
int cal(char *ptr)
{
int i=0,c,prod=1,mod;
while(ptr[i]!='\0')
{
if(ptr[i]>='A'&&ptr[i]<='Z')
{
c=ptr[i]-'@';
prod=prod*c;
i++;
}
}
mod=prod%47;
return mod;
}
出力:-
私の質問は、セグメンテーション違反を特定する方法です。私はこの障害について読みましたが、このプログラムで何をすべきかわかりません。どんな助けでも素晴らしいでしょう。