NOI 僱傭兵講解(c/c++)

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);
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章