問題
鉛筆の初期値Nがあり、m本あればn本新たに作ることができる。最終的に何本の鉛筆を売れるか。
解法
まず、答えは「N+新たに生成された鉛筆」となる。
以下のコードでは、resという現在手元にある鉛筆を格納する変数を作り(初期値はN)、答えとなる変数はNをそのまま流用している。
制約のm>nより、手元にある鉛筆は必ず少なくなっていく。m本からn本生成することを考えると、手元の鉛筆は生成の度に(m-n)本ずつ少なくなっていく。また、n本生成された新しい鉛筆は、答えとなるNに足される。
ここで、余った鉛筆は特に意識せずともresの中に残っていることも嬉しい。
問題全体では、どうせ売った鉛筆は全て回収するため、常に手元にあると考えて差し支えない。
int main() { int m,n,N; cin>>m>>n>>N; int res=N; while(1){ if(res<m)break; res-=m; res+=n; N+=n; } cout<<N<<endl; return 0; }