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

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

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

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

解決済

2回答

572閲覧

実行環境によって挙動が異なるのですが理由が分かりません

l_h_l_h

総合スコア22

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

0グッド

0クリップ

投稿2018/09/29 15:17

こちらの問題を解いていたのですが、サイト上での実行結果と手元の環境での実行結果が異なり困っています
私のコードは以下の通りです

#include<bits/stdc++.h> using namespace std; int main(){ long n; cin>>n; long numcnt[100001]; long v[n]; for(int i=0;i<n;i++)cin>>v[i]; long tmp=0,res=0; long a[n]; memset(numcnt,0,100001); memset(a,0,n); for(int i=0;i<n;i+=2){ numcnt[v[i]]++; a[i] = v[i]; } for(int i=0;i<n;i+=2){ tmp = max(numcnt[a[i]],tmp); } res += (n/2 - tmp); memset(numcnt,0,100001); memset(a,0,n); tmp=0; for(int i=1;i<n;i+=2){ numcnt[v[i]] ++; a[i] = v[i]; } for(int i=1;i<n;i+=2){ tmp = max(numcnt[a[i]],tmp); } res += (n/2 - tmp); if(res==0&&v[0]==v[1]){ res = n/2; } cout<<res<<endl; }

配列numcntで出現する数字の数を数え、奇数列、偶数列ごとに最頻値を見つけ出し、解を求めています
ここで手元の環境(Eclipseを使っています)では入力を100000にしても想定通り動くのに対し、サイト上では入力を100000にするとエラー、もしくは謎の数字の羅列が返ってきます
tmpの値を求める処理のfor文の条件を(i=0;i<n;i++)という風にするとエラーが起き、上記のようにすると謎の数字の羅列となります
宣言した配列のサイズが問題かと思ったのですが他の人の回答を見る限り、そこが問題ではないようです
実行環境が異なれば挙動が異なるのは当たり前といえば当たり前なのですが、なぜうまく動かないのか分かりません……
どなたか分かる方いらっしゃいましたらご教授お願いします

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

とりあえず問題ありそうな箇所としては

memset(numcnt,0,100001); memset(a,0,n);

ですね

memsetの第3引数はバイト単位なので

c

1 memset(numcnt,0,100001 * sizeof(*numcnt)); 2 memset(a,0,n * sizeof(*a));

とする必要があります

投稿2018/09/29 15:52

asm

総合スコア15147

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

l_h_l_h

2018/09/30 06:01

ありがとうございます 無事動きました 今まで動いていたのでなんとなくの理解でmemsetを使っていたように思います 有難うございました
guest

0

初期化が正しく行えていないように見えます。memsetの3番目の引数は要素数ではなくバイト数です。

投稿2018/09/29 15:39

segavvy

総合スコア958

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

l_h_l_h

2018/09/30 06:01

回答ありがとうございました まさしくご指摘いただいた通りでした
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問