質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
86.12%
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

GCC

GCCはGNU Compiler Collectionの略です。LinuxのC言語コンパイラのデファクトスタンダードであり、数多くの他言語やプラットフォームサポートもします。

解決済

atcoderの問題で、原因不明のエラー

shamsham
shamsham

総合スコア38

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

GCC

GCCはGNU Compiler Collectionの略です。LinuxのC言語コンパイラのデファクトスタンダードであり、数多くの他言語やプラットフォームサポートもします。

1回答

0リアクション

0クリップ

341閲覧

投稿2022/09/26 06:55

前提

atcoderの問題で、バグが発生しましたが、原因がつかめていません。

実現したいこと

バグの原因を突き止める。

発生している問題・エラーメッセージ

イメージ説明

該当のソースコード

c

ソースコード #include<stdio.h> int max_kohuku(int a,int b,int c);//3つの中から最大を返す int second_kohuku(int a,int b,int c);//3つの中から2番目に大きい数を返す int main(){ int N; int kohuku[100010][3];//i日目の行動jをした時の幸福度はkohuku[i][j] int sum_kohuku[100010][2];//i日目に行動jをしたときにそれを含めた最大の幸福度はsum_kohuku[i][j] int sss; sss = scanf("%d",&N); for(int i = 0;i < N;i++){ sss = scanf("%d %d %d",&kohuku[i][0],&kohuku[i][1],&kohuku[i][2]); sum_kohuku[i][0] = -1;//初期化 sum_kohuku[i][1] = -1;//初期化 } sum_kohuku[0][1] = max_kohuku(kohuku[0][0],kohuku[0][1],kohuku[0][2]); sum_kohuku[0][0] = second_kohuku(kohuku[1][0],kohuku[1][1],kohuku[1][2]); for(int i = 1;i < N;i++){ sum_kohuku[i][1] = max_kohuku(kohuku[i][0],kohuku[i][1],kohuku[i][2]) + sum_kohuku[i-1][0]; sum_kohuku[i][0] = second_kohuku(kohuku[i][0],kohuku[i][1],kohuku[i][2]) + sum_kohuku[i-1][1]; } int pri; if(sum_kohuku[N-1][0] > sum_kohuku[N-1][1]){ pri = sum_kohuku[N-1][0]; }else{ pri = sum_kohuku[N-1][1]; } printf("%d",pri); return 0; } int max_kohuku(int a,int b,int c){ int ret = a; if(ret < b){ ret = b; } if(ret < c){ ret = c; } return ret; } int second_kohuku(int a,int b,int c){ int ret = a; if(ret == max_kohuku(a,b,c)){ ret = b; } if((ret < b) && b != max_kohuku(a,b,c)){ ret = b; } if((ret < c) && c != max_kohuku(a,b,c)){ ret = c; } return ret; }

試したこと

まず、前に質問した時にscanfの返り値にsssをつけずに、(void)scanfとすればいいと教えてくださった方がいたのですが、atcoderのシステムの関係なのか、それでもバグが出たので返り値をつけさせていただきました。

変数のオーバーフローかと思ってkohuku,sum_kohukuの要素を5倍くらいに増やしたのですが、実行結果は変わりませんでした。

自分の環境で、サンプルを入力すると正しく動作します。

補足情報(FW/ツールのバージョンなど)

問題のURLです
https://atcoder.jp/contests/dp/tasks/dp_c
もし、ほかに必要な情報があれば教えてください。
回答よろしくお願いします。

以下のような質問にはリアクションをつけましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

リアクションが多い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

下記のような質問は推奨されていません。

  • 間違っている
  • 質問になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

適切な質問に修正を依頼しましょう。

2022/09/26 07:17

こちらの質問が他のユーザーから「やってほしいことだけを記載した丸投げの質問」という指摘を受けました。

int32_t

2022/09/26 07:25

どういう入力で問題が出るかはわからないのですか?
jimbe

2022/09/27 04:11

scanf の返り値を受け取っているかどうかだけで異常動作というのは考えられません。 (atcoder の他の問題でそのようなことは聞いたことが無いと思います。)
shamsham

2022/09/27 17:09

int32_tさん、コメントありがとうございます。 私の知る限りでは、どの入力でエラーするのかわかりません。

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
86.12%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

GCC

GCCはGNU Compiler Collectionの略です。LinuxのC言語コンパイラのデファクトスタンダードであり、数多くの他言語やプラットフォームサポートもします。