ページ 11

関数の宣言の順番

Posted: 2021年4月24日(土) 11:33
by 03life
この問題についての質問です。

https://atcoder.jp/contests/abc188/tasks/abc188_b


下の二つのコードの

コード:

int = i;
の順番を変えただけで正解になりました。なぜだか解説をお願いしたいです。

最初が正解のコード、最後が不正解のコードとなります。
正解

コード:

#include <stdio.h>

int main (void)
{
    int i;
    int N;
    scanf("%d",&N);

    int a[N],b[N];
    int sum;

    for(i=0; i<N; i++) {
        scanf("%d",&a[i]);
    }

    for(i=0; i<N; i++) {
        scanf("%d",&b[i]);
    }

    for(i=0; i<N; i++) {
        sum += (a[i]*b[i]);
    }

    if(sum == 0) {
        printf("Yes\n");
    } else {
        printf("No\n");
    }

    return 0;
}
不正解

コード:

#include <stdio.h>

int main (void)
{
    int N;
    scanf("%d",&N);

    int i;
    int a[N],b[N];
    int sum;

    for(i=0; i<N; i++) {
        scanf("%d",&a[i]);
    }

    for(i=0; i<N; i++) {
        scanf("%d",&b[i]);
    }

    for(i=0; i<N; i++) {
        sum += (a[i]*b[i]);
    }

    if(sum == 0) {
        printf("Yes\n");
    } else {
        printf("No\n");
    }

    return 0;
}

Re: 関数の宣言の順番

Posted: 2021年4月24日(土) 13:34
by box
それはそのサイトがそう判定してるからでしょう。
ところで関数の宣言じゃないしwww
変数の定義w

Re: 関数の宣言の順番

Posted: 2021年4月24日(土) 14:09
by みけCAT
正解のコード
提出 #21978471 - AtCoder Beginner Contest 188
の提出は確認できましたが、不正解のコードの提出はすぐには確認できなそうです。
もしよろしければ不正解のコードの提出結果のURLを教えていただけますか?

なお、似たコード
提出 #21978422 - AtCoder Beginner Contest 188
はありましたが、これは配列の要素数が少ない値で固定になっており、ここの不正解のコードとは異なります。

Re: 関数の宣言の順番

Posted: 2021年4月24日(土) 17:37
by 03life
みけCAT さんが書きました:
3年前
正解のコード
提出 #21978471 - AtCoder Beginner Contest 188
の提出は確認できましたが、不正解のコードの提出はすぐには確認できなそうです。
もしよろしければ不正解のコードの提出結果のURLを教えていただけますか?

なお、似たコード
提出 #21978422 - AtCoder Beginner Contest 188
はありましたが、これは配列の要素数が少ない値で固定になっており、ここの不正解のコードとは異なります。
https://atcoder.jp/contests/abc188/submissions/21978449
これです

Re: 関数の宣言の順番

Posted: 2021年4月24日(土) 17:38
by 03life
box さんが書きました:
3年前
それはそのサイトがそう判定してるからでしょう。
ところで関数の宣言じゃないしwww
変数の定義w
ありがとうございます。
言葉間違いなのは僕が悪いんですけど、笑う要素がどこにあるかわからないんですが、、

Re: 関数の宣言の順番

Posted: 2021年4月24日(土) 19:13
by box
わからなければそのままでよろしいかと。
なお、変数の定義は、その関数の最初の実行文の前にすべて
済ませておくことを強くおすすめします。
そうすれば、どんな処理系でも絶対にエラーにはなりませんので。

Re: 関数の宣言の順番

Posted: 2021年4月24日(土) 19:16
by 03life
box さんが書きました:
3年前
わからなければそのままでよろしいかと。
なお、変数の定義は、その関数の最初の実行文の前にすべて
済ませておくことを強くおすすめします。
そうすれば、絶対にエラーにはなりませんので。
なるほど。ありがとうございます!次からそうしてみます。

Re: 関数の宣言の順番

Posted: 2021年4月25日(日) 12:29
by みけCAT
03life さんが書きました:
3年前
https://atcoder.jp/contests/abc188/submissions/21978449
これです
これは別の問題に提出していますね。

Re: 関数の宣言の順番

Posted: 2021年4月25日(日) 12:31
by みけCAT
box さんが書きました:
3年前
なお、変数の定義は、その関数の最初の実行文の前にすべて
済ませておくことを強くおすすめします。
そうすれば、どんな処理系でも絶対にエラーにはなりませんので。
そんなことは無いでしょう。
存在しない型(その時点で宣言されていない型)を使ったり、予約語を変数として定義しようとしたりしたら、
エラーになる可能性があります。
また、文法上正しくても、大きい配列をローカルの自動変数で確保しようとすると、
スタックオーバーフローで落ちることもあります。

Re: 関数の宣言の順番

Posted: 2021年4月25日(日) 22:41
by 03life
みけCAT さんが書きました:
3年前
03life さんが書きました:
3年前
https://atcoder.jp/contests/abc188/submissions/21978449
これです
これは別の問題に提出していますね。
あ。。。
提出したらあってました。
本当に申し訳ないです。
ありがとうございました。。