OJ質問記録:質問B:ブルーブリッジカップ(JAVAグループ)2015-8ドリンクの償還

質問B:ブルーブリッジカップ(JAVAグループ)2015-8ドリンクの償還

件名リクエスト:
Leyangyang BeverageFactoryはプロモーション活動を行っています。LeyangyangタイプC飲料の場合、キャップが3つある場合、タイプC飲料の別のボトルと交換でき、永久にリサイクルできますが、クレジットは許可されていません。

Xiao Mingがボトルキャップを無駄にせず、可能な限り活動に参加する場合、最初に購入したnボトルの飲料について、最終的に何本の飲料を入手できるかを計算してください。


購入する飲料の数を示す整数nを入力します(0 <n <10000)


実際に得られた飲み物の数を表す整数を出力します。
サンプル入力コピー
100
サンプル出力コピー
149

問題解決のアイデア:
3本ごとに新しいボトルの飲料と交換できます。
所有している飲料の総数を3で割って、今回交換できる飲料の数を求めます。新しい飲料と交換できない飲料が0〜2ボトル残っている可能性があります。現在の飲料の総数を使用できます。この交換で残っているボトルの数を取得するには、残りの3つを取ります。次に、1回の交換後、私たち
が持っている飲み物の数==交換された飲み物+残りの飲み物と交換されました
次回の交換は、お飲み物の数が3個未満になり、交換ができなくなるまで続けます。
この時点で、交換できる飲料ボトルの総数に加えて、最初に持っていた飲料ボトルの数、つまり、入手した飲料ボトルの総数を取得します。

通関コード:

#include <iostream>

using namespace std;

int main() {
    
    
	int bought, n, res = 0;
	
	cin >> n;
	
	bought = n;
	
	while (n >= 3) {
    
    
		res = res + (n / 3);
		n = (n / 3) + (n % 3);	
	}
	
	cout << bought + res;
	
	return 0;
}

コンプリート。

おすすめ

転載: blog.csdn.net/weixin_45711556/article/details/108620437