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

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

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

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

Q&A

解決済

3回答

1833閲覧

AIZU ONLINE JUDGEでエラーが発生し、その原因がわかりません。

jonko

総合スコア15

C++

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

0グッド

0クリップ

投稿2021/08/22 08:20

どなたか原因がわかる方がいらっしゃいましたら、教えていただきたいです。

問題文

A大学は1フロア10部屋、3階建ての公舎4棟を管理しています。公舎の入居・退去の情報を読み込み、各部屋の入居者数を出力するプログラムを作成して下さい。

n件の情報が与えられます。各情報では、4つの整数b, f, r, vが与えられます。これは、b棟f階のr番目の部屋にv人が追加で入居したことを示します。vが負の値の場合、-v人退去したことを示します。

最初、全ての部屋には誰も入居していないものとします。

Input

最初の行に情報の数 n が与えられます。

続いて n 件の情報が与えられます。各情報には4つの整数 b, f, r, v が空白区切りで1行に与えられます。

Output

4棟について入居者数を出力して下さい。各棟について、1階、2階、3階の順に入居者数を出力します。各階については、1番目、2番目、・・・、10番目の部屋の入居者数を順番に出力します。入居者数の前には1つの空白を出力して下さい。また、各棟の間には####################(20個の#)で区切って下さい。

求められる出力例

![イメージ説明

私が書いたコード

C++

1#include <stdio.h> 2#include <vector> 3#include <algorithm> 4 5using namespace std; 6 7int main() 8{ 9 int n,max_b=0; //n:the number of buildings 10 scanf("%d",&n); 11 int b[n],f[n],r[n],v[n]; //b:building, f:floor, r:room, v:the number of people 12 for(int i=0; i<n; i++){ 13 scanf("%d %d %d %d",b[i],f[i],r[i],v[i]); 14 max_b = max(b[i],max_b); 15 } 16 17 //----initialization----// 18 vector<vector<vector<int> > > data; 19 for(int i=0; i<max_b; i++){ 20 for(int j=0; j<3; j++){ 21 for(int k=0; k<10; k++){ 22 data[i][j].push_back(0); 23 } 24 } 25 } 26 27 //----movement of people----// 28 for(int i=0; i<n; i++){ 29 data[b[i]-1][f[i]-1][b[i]-1] += v[i]; 30 } 31 32 //----output----// 33 for(int i=0; i<max_b; i++){ 34 for(int j=0; j<3; j++){ 35 for(int k=0; k<10; k++){ 36 printf(" %d",data[i][j][k]); 37 } 38 printf("\n"); 39 } 40 for(int j=0; j<20; j++){ 41 printf("#"); 42 } 43 printf("\n"); 44 } 45}

Error message

timeout: the monitored command dumped core 0.00user 0.00system 0:03.34elapsed 0%CPU (0avgtext+0avgdata 2880maxresident)k 0inputs+8outputs (0major+233minor)pagefaults 0swaps

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

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

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

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

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

guest

回答3

0

自己解決

vectorではなく配列にしたら動きました。

投稿2021/08/22 14:03

jonko

総合スコア15

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

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

0

C++

1 //----initialization----// 2 vector<vector<vector<int> > > data; // dataは最初カラッポだから 3 for(int i=0; i<max_b; i++){ 4 for(int j=0; j<3; j++){ 5 for(int k=0; k<10; k++){ 6 data[i][j].push_back(0); // data[i][j]は存在しない 7 } 8 } 9 }

投稿2021/08/22 09:59

episteme

総合スコア16612

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

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

0

scanf の引数に int 型の値を渡しています。 scanf に渡すべきは格納すべき「場所 (ポインタ)」です。 意味のある場所ではないので入力されたデータはデタラメな場所に書き込まれて暴走しているようです。

ところで Teratail の理念としてデバッグ依頼は推奨されません

投稿2021/08/22 08:44

SaitoAtsushi

総合スコア5684

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

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

jonko

2021/08/22 08:54

ありがとうございました。ご指摘については以後気をつけます。 配列はポインタとして解釈されると勘違いしていました。
jonko

2021/08/22 08:55

修正しましたが、同じerrorでしたのでもう一度よく考えたいと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問