NOI 僱傭兵
例題
描述
僱傭兵的體力最大值爲M,初始體力值爲0、戰鬥力爲N、擁有X個能量元素。
當僱傭兵的體力值恰好爲M時,纔可以參加一個爲期M天的戰鬥期,戰鬥期結束體力值將爲0。在同一個戰鬥期內,僱傭兵每連續戰鬥n天,戰鬥力就會上升1點,n爲當前戰鬥期開始時的戰鬥力。
一個戰鬥期結束後,僱傭兵需要用若干個能量元素使其體力恢復到最大值M,從而參加下一個戰鬥期。每個能量元素恢復的體力值不超過當前的戰鬥力。每個能量元素只能使用一次。
請問:僱傭兵的戰鬥力最大可以到達多少。
輸入
一行包括三個整數M、N、X,相鄰兩個整數之間用單個空格隔開。M、N、X均爲不超過10000的正整數。
輸出
輸出一個整數,爲僱傭兵的最大戰鬥力。
樣例輸入
5 2 10
樣例輸出
6
AC代碼
//C++版
#include<bits/stdc++.h>
using namespace std;
int main()
{
int m,n,x;
cin >> m >> n >> x;
int M = 0;//初始體力值爲0
for(int i=0;i<x;i++){//能量元素 恢復體力
M += n;//用能量元素恢復體力
if(M>=m){//恢復完畢
n+=m/n;/*僱傭兵每連續戰鬥n天,戰鬥力就會上升1點
這裏戰鬥天數爲m*/
M=0;//結束後體力爲0
}
}
cout << n ;
}
//c語言版
#include <stdio.h>
int main()
{
int m,n,x;
scanf("%d%d%d",&m,&n,&x);
int M = 0;//初始體力值爲0
for(int i=0;i<x;i++){//能量元素 恢復體力
M += n;//用能量元素恢復體力
if(M>=m){//恢復完畢
n+=m/n;/*僱傭兵每連續戰鬥n天,戰鬥力就會上升1點
這裏戰鬥天數爲m*/
M=0;//結束後體力爲0
}
}
printf("%d",n);
}