Atcoder 実行時エラー

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
03life
記事: 16
登録日時: 2年前

Atcoder 実行時エラー

#1

投稿記事 by 03life » 2年前

atcoderの下記の問題を以下のようなコードで書いたところ実行時エラーと不正解になります。
解決方法を教えていただきたいです。

https://atcoder.jp/contests/abc095/tasks/abc095_b


--コード

コード:

nclude <stdio.h>

int main(void)
{
    int N,X;
    int m[1001];
    int mMax = 0;
    int min;
    int sum = 0;
    scanf("%d%d",&N,&X);
    for(int i=0; i<N; i++) {
        scanf("%d",&m[i]);
        mMax += m[i];
    }

    for(int j=0; j<N; j++) {
        for(int k=1; k<N; k++) {
            if(m[j] < m[k]) {
             min = m[j];
            }
        }
    }

    sum = N + ((X-mMax) / min);
    
    printf("%d\n",sum);
    return 0;
}

03life
記事: 16
登録日時: 2年前

Re: Atcoder 実行時エラー

#2

投稿記事 by 03life » 2年前

コピーのミスで #include の #iが抜けています

アバター
みけCAT
記事: 6734
登録日時: 13年前
住所: 千葉県
連絡を取る:

Re: Atcoder 実行時エラー

#3

投稿記事 by みけCAT » 2年前

minの扱いが不適切です。

例えば

コード:

2 100
2
1
という入力を与えると、 m[j] < m[k] を満たす j, k の組み合わせが存在しないため、
未初期化の自動変数minの値(不定)が計算に使われ、未定義動作になります。
例えば、minの初期値がたまたま0だった場合、
整数のゼロ除算により強制終了(ランタイムエラー)になるかもしれません。

どんな入力が来ても、sum の計算の前に m_i の最小値が min に入るよう、
プログラムを修正するといいと思います。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

03life
記事: 16
登録日時: 2年前

Re: Atcoder 実行時エラー

#4

投稿記事 by 03life » 2年前

みけCAT さんが書きました:
2年前
minの扱いが不適切です。

例えば

コード:

2 100
2
1
という入力を与えると、 m[j] < m[k] を満たす j, k の組み合わせが存在しないため、
未初期化の自動変数minの値(不定)が計算に使われ、未定義動作になります。
例えば、minの初期値がたまたま0だった場合、
整数のゼロ除算により強制終了(ランタイムエラー)になるかもしれません。

どんな入力が来ても、sum の計算の前に m_i の最小値が min に入るよう、
プログラムを修正するといいと思います。
ありがとうございます!解決できました!!

返信

“C言語何でも質問掲示板” へ戻る