読者です 読者をやめる 読者になる 読者になる

matthew as a q.

目標10記事quant

AOJ 0102 Matrix-like Computation

シミュレーション。途中テストコード書いて、どの部分でエラー発生しているのか確かめた。

配列使った計算で値がバグってるとき

→配列が初期化されてないことを疑う

出力方法の指定がないか注意

Each item of the table should be aligned to the right with a margin for five digits.

AIZU ONLINE JUDGE

→(半角右詰め5桁で表示)

cf.

cout.width(n);(n桁右詰めで表示)はその直後のcoutのみに作用する

#include <iostream>
#include <string>
#include <sstream>
#include <algorithm>
#include <numeric>
#include <iomanip>
#include <climits>
#include <vector>
#include <functional>
#include <cstring>
#include <list>
#include <fstream>
#include <map>
#include <cmath>
#include <cctype>
using namespace std;

typedef long long ll;

int main(){
    int n;
    while(cin >> n){
        if(n==0)
            break;
        int sum[n+2][n+2];
        
        //初期化
        for (int i = 0; i < n+2; ++i)
        {
            for (int j = 0; j < n+2; ++j)
            {
                sum[i][j]=0;
            }
        }
        
        //入力
        for (int i = 0; i < n; ++i){
            for (int j = 0; j < n; ++j)
                cin >> sum[i][j];
        }
        
        //入力が適切に入っているかテスト。初期化していない場合は、ここでうまく入っていても計算にかけると値がバグる。理由はまだわからん
/*    for (int i = 0; i < n; ++i){
        for (int j = 0; j < n; ++j){
            cout << sum[i][j] << " ";
        if (j==n-1)
        {
            cout << endl;
        }
        }
    }
*/
        //結果を配列に
    for (int i = 0; i < n; ++i)
    {
        for (int j = 0; j < n; ++j)
        {
            sum[i][n]+=sum[i][j];
            //どこまで正確に足すことが出来ているかテスト
//            cout << sum[i][n] << endl;
        }        
    }

    for (int j = 0; j < n+1; ++j)
        {
            for (int i = 0; i < n; ++i)
            {
                sum[n][j]+=sum[i][j];
            }
        }
    for (int i = 0; i < n+1; ++i)
    {
        for (int j = 0; j < n+1; ++j)
        {
            cout.width(5);//cout.width(n)はその直後のcoutのみにしか作用しない
            cout << sum[i][j];
            if(j==n)
                cout << endl;
        }
    }
//    cout << sum[0][4] << endl;
    }
  
	return 0;
}