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; }