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

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

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

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

Q&A

解決済

1回答

858閲覧

HackerRankの問題で正しい出力を得たい。

kthkrst

総合スコア1

C++

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

0グッド

0クリップ

投稿2021/04/09 05:29

前提・実現したいこと

HackerRankの問題を解いています。そこで、わからないことがあったので質問させていただきます。

発生している問題・エラーメッセージ

書いたコードの内容自体は合っていると思うのですが、入力に対して、出力で正しい値が得られないことです。解いている問題は補足情報のところに載せています。与えられる正方行列の対角成分の和と反対対角成分の和の絶対値を求める問題です。
また、コードの内容が合っているかどうかの評価判断はリンク先のEditorialのC++のコードです。

input n=3 11 2 4 4 5 6 10 8 -12 の時の正しいoutputは15ですが、該当のソースコードだと4200287になります。。

該当のソースコード

C++

1#include <iostream> 2#include <vector> 3#include <assert.h> 4using namespace std; 5 6 7 8int main(){ 9 int n; 10 cin >> n; 11 vector<vector<int>> arr(n,vector<int>(n)); 12 13 for(int i=0;i<n;i++){ 14 for(int j=0;j<n;j++){ 15 cin >> arr.at(i).at(j); 16 } 17 } 18 19 assert((int)arr.size()== n); 20 21 int sum1,sum2; 22 for(int i=0;i<n;i++){ 23 for(int j=0;j<n;j++){ 24 if(i==j)sum1 += arr.at(i).at(j); 25 if(i+j == (n-1)){ 26 sum2 += arr.at(i).at(j); 27 //cout << sum2 <<endl; 28 } 29 } 30 } 31 cout << abs(sum1-sum2)<< endl; 32 return 0; 33}

試したこと

debugしていく中で、わかったことを書かせていただきます。上のプログラムでコメントアウトしたものをコメントアウトを外して実行すると、出力でほしい値abs(sum1-sum2)の値が正しい値になります。この理由も教えていただけると嬉しいです。

補足情報(FW/ツールのバージョンなど)

Diagonal Difference

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

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

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

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

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

guest

回答1

0

ベストアンサー

sum1,sum2が初期化されず不定な値になっていることが原因です。

手元で試してみましたが、sum1, sum2を0にしておけばコメントアウト関係なしに15が出ましたよ。

投稿2021/04/09 06:25

Squirrels

総合スコア29

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

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

kthkrst

2021/04/09 06:30

ありがとうございます!初期化を忘れていました。ご指摘ありがとうございます!!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問