前提
- Mac
- JavaまたはC++を使用
- 開発環境として、JavaはEclipse, C++はXcodeを使用
- 問題は http://arc039.contest.atcoder.jp/tasks/arc039_a
問題について整理してみる
- C++で解いた
- ソースコード http://arc039.contest.atcoder.jp/submissions/405660
- 以下のどれかで A - B が最大になる
- Aのどこかを9に書き換える
- Bの一番上の桁を1に書き換える
- Bの一番上の桁以外の桁を0に書き換える
実装の概要
上のソースコードはテンプレやライブラリ部分が長いので整理
int main(int argc, const char * argv[]){
// 入力はstringで受ける
string a_str, b_str;
cin >> a_str >> b_str;
int a = stoi(a_str);
int b = stoi(b_str);
int ans = a - b;
for(int i = 0; i < a_str.length(); i++){
char c = a_str[i];
// Aを一箇所9に書き換える
a_str[i] = '9';
// intに変えて引き算してmax
int m = stoi(a_str) - stoi(b_str);
ans = max(ans, m);
// 元に戻す
a_str[i] = c;
}
for(int i = 0; i < b_str.length(); i++){
char c = b_str[i];
// 一桁目の場合は1, それ以外は0に書き換える
char cc = i ? '0' : '1';
b_str[i] = cc;
int m = stoi(a_str) - stoi(b_str);
ans = max(ans, m);
b_str[i] = c;
}
cout << ans << endl;
}