前提・実現したいこと
C言語でボウリングのスコア計算を行うプログラムを書いています。
しかし、特定の場合に想定とは違う結果を出力するため困ってしまいました。
なのでプログラムのどこを直せばいいのかということについて質問をさせてください。
発生している問題
gcc score.c ./a.out 18 0 10 2 7 10 8 1 8 2 10 10 9 1 7 3 10 9 1
と入力したとき(1番目の数字は投げた回数の合計、2番目の数字以降は1投目、2投目…の倒したピンの数を示す)、正しい結果として175を出力してほしいが結果は185となってしまう。
./a.out 12 10 10 10 10 10 10 10 10 10 10 10 10
と入力したときも、正しい結果として300を出力してほしいが結果は320となってしまう。
該当のソースコード
C
1#include<stdio.h> 2#define MAX (21) 3 4int main(int argc,char *argv[]) { 5 int pin[MAX];//倒したピンの数を格納する配列 6 int frame;//フレーム数 7 int cast;//投球数 8 int score;//スコア 9 int frame_score;//フレーム内で倒したピンの数 10 int frame_cast;//フレーム内の投球数 11 int i; 12 int n = argc- 2; 13 14 if(n>MAX)n=MAX; 15 for(i=0;i<n;i++){ 16 pin[i]=atoi(argv[i+2]); 17 } 18 19 for(cast=score=frame=0; 9 >= frame; frame++){ 20 for(frame_cast=frame_score=0;cast<n && frame_cast<2 && frame_score <10; frame_cast++,cast++){ 21 score += pin[cast]; 22 frame_score += pin[cast]; 23 if(frame_cast == 0 && pin[cast]==10){ 24 for(i=1;i<=2 && cast+i<n;i++){ 25score+=pin[cast+i]; 26 } 27 }else if(frame_score == 10){ 28 if(cast+1<n)score+=pin[cast+1]; 29 } 30 } 31 } 32 for(; cast<n;cast++){ 33 score += pin[cast]; 34 } 35 printf("%d\n",score); 36 return 0; 37} 38
試したこと
./a.out 16 1 8 9 1 10 10 2 8 6 3 8 0 10 10 8 1
と入力したときはちゃんと160という結果が出力されました。正直何が原因なのかよくわかりません。直し方を教えていただけると幸いです。よろしくお願いします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/02/10 14:29