🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
C++

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

Q&A

1回答

1027閲覧

Atcoder の基本的な問題

NASIJIRU

総合スコア15

C++

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

0グッド

1クリップ

投稿2019/09/07 06:35

編集2019/11/04 06:31

以下のリンクの問題について、回答のコードと自分のコードの違いがわかりません。リンク内容

テストコードでは、回答はすべてACしますが質問者のコードはAC,WA,REの三通りの結果が出てきます。何が行けないのでしょうか?
ご指摘の程よろしくおねがいします。

c++

1#include <iostream> 2#include <algorithm> 3using namespace std; 4 5int main() { 6 int N; 7 int a[110]; // 最大 100 個ですが余裕をもたせます 8 cin >> N; 9 for (int i = 0; i < N; ++i) cin >> a[i]; 10 11 sort(a, a + N, greater<int>()); // a[0:N] を大きい順にソート 12 int Alice = 0; 13 int Bob = 0; 14 for (int i = 0; i < N; ++i) { 15 if (i % 2 == 0) { // Alice のターン 16 Alice += a[i]; 17 } 18 else { // Bob のターン 19 Bob += a[i]; 20 } 21 } 22 cout << Alice - Bob << endl; 23} 24 25 26 27質問者のコード#include <bits/stdc++.h> 28using namespace std; 29 30int main() { 31 int N; 32 int i; 33 int a[i]; // ここだけ回答と異なっていると思います(https://atcoder.jp/contests/abs/tasks/abc088_b) 34 cin >> N; 35 for (int i = 0; i < N; ++i) cin >> a[i]; 36 37 sort(a, a + N, greater<int>()); // a[0:N] を大きい順にソート 38 int Alice = 0; 39 int Bob = 0; 40 for (int i = 0; i < N; ++i) { 41 if (i % 2 == 0) { // Alice のターン 42 Alice += a[i]; 43 } 44 else { // Bob のターン 45 Bob += a[i]; 46 } 47 } 48 cout << Alice - Bob << endl; 49}

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

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

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

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

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

ikadzuchi

2019/09/07 12:41

以前から思っていましたが、タイトルは内容が分かるものにしてください。 どのようなプログラムで、どのような問題が出ているのか。
y_waiwai

2019/09/07 23:37

このままではコードが見づらいので、質門を編集し、<code>ボタンで、出てくる’’’の枠の中にコードを貼り付けてください
guest

回答1

0

C++でも可変長配列(要素数が変数の配列宣言)ってできるようになったんだっけ? コンパイラの独自拡張で通るのかな。出来るとして、

C++

1int main() { 2 int N; 3 int i; 4 int a[i]; //この時点でのiの値はいくつ?

ローカル変数の初期値は不定(プログラムからは決定出来ない)です。ここでNとかiとかa[]の各要素は0かも、100かも、-12345かも知れません。int a[-1億];とか...どうなるかしら。
(なぜそういう作りにしているのか、も調べてみてくださいね)

あと、「間違い」ではないし、競技プログラミングとやらではそういうの見ないのかも知れないけれど、
int i;を宣言しといて、そのスコープ内でわざわざfor(int i=0;...と同じ名前の変数を使うのは、混乱の種になりそうで決して褒められる命名ではないと思う。C#ではそういうのをエラーにしちゃいましたね。

そもそも、問題文で

取ったカードの数の合計がその人の得点になります.

って書かれているのが気になる。「カードの数」って言ったら枚数かもしれなくない? なんて思っちゃうけど。

(15分考えてわからなかったらteratailで質問しちゃうのもいいけど、3日間考え抜いて自分の間違いに気づくのも とてもとても大事な経験になると思うよ)

投稿2019/09/07 07:10

thkana

総合スコア7703

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

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

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

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問