kotonoha_pcg@気ままに雑記

kotonoha_pcgが気分次第で様々書き置きます.dlang関係他:http://kotonoha-pcg.hatenadiary.com

AOJ ITP1_7_C Spreadsheet

先週アドバイスを貰いながら書いきました.久々に(いやまぁ2~3日振りくらいなんですけど)自分で方針を立てて核心以外は書くことが出来て良かった.残念なぐらい二次元配列への入力の仕方を忘れていてそこから躓いたので改善したいところです.

概要

 行数r列数cから構成されるr*cの表が与えられる.この各行と各列の合計を出力する.

入力

 r*cの表が与えられる.

出力

 R+1*c+1の大きさの表を出力する.

#include <iostream>
using namespace std;
const int MAX_N = 100;
typedef long long lint;

int main() {
	int r,c;
	int a[MAX_N+1][MAX_N+1]={0};
	int sum=0;
	//in
	cin>>r>>c;
	for(int i=0;i<r;i++){
		for(int j=0;j<c;j++){
			cin>>a[i][j];
		}
	}
	//summer
	for(int i=0;i<r;i++){
		for(int j=0;j<c;j++){
			a[i][c]+=a[i][j];
			a[r][j]+=a[i][j];
			sum+=a[i][j];
		}
	}
	a[r][c]=sum;
	//out
	for(int i=0;i<r+1;i++){
		for(int j=0;j<c+1;j++){
			if((j==c)){
				cout<<a[i][j];
			}else{cout<<a[i][j]<<" ";}
		}
		cout<<endl;
	}
	
	
	return 0;
}
//if began
/*
1 1 3 4 5 14 
2 2 2 4 5 15 
3 3 0 1 1 8 
2 3 4 4 6 19 
8 9 9 13 17 56
*/
//if
/*
1 1 3 4 5 14
2 2 2 4 5 15
3 3 0 1 1 8
2 3 4 4 6 19
8 9 9 13 17 56




*/

 ソースコードは至ってシンプルで,入力した各行の最後にその行の合計値を代入.列についても同等.sumに今までのすべての値を代入しておく.a[r][c]へsumに代入しておいた値を代入.最後に列の最後尾かどうかを判定し,もし最後尾ならば空白を開けずに改行させ,そうでない場合は逆の処理をさせる,でなんとか書けました.また,下のコメントアウトされている個所は,//outでif文による最後尾判定を追加したかしないかの結果をコピペしました.//if began(適当固有名詞兄貴オッスオッス)では,1~4行目は最後尾でも空白を開けての改行を行っていましたが,//ifから下にある結果は,すべての行について最後尾では空白を開けていません.

 多次元配列の扱い方について忘れていたり,見落としていた箇所はありましたが(a[r][j]+=a[i][j];の部分はなんでくなるのか分からなかった),自分で方針立てて実装できるとやっぱりうれしかったです.