最強DE 戰鬥力
時間限制:1000 ms | 內存限制:65535 KB
難度:3
- 描述
-
春秋戰國時期,趙國地大物博,資源非常豐富,人民安居樂業。但許多國家對它虎視眈眈,準備聯合起來對趙國發起一場戰爭。
顯然,面對多個國家的部隊去作戰,趙國的兵力明顯處於劣勢。戰鬥力是決定戰爭成敗的關鍵因素,一般來說,一支部隊的戰鬥力與部隊的兵力成正比。但當把一支部隊分成若干個作戰隊伍時,這個部隊的戰鬥力就會大大的增強。
一支部隊的戰鬥力是可以通過以下兩個規則計算出來的:
1.若一支作戰隊伍的兵力爲N,則這支作戰隊伍的戰鬥力爲N;
2.若將一支部隊分爲若干個作戰隊伍,則這支部隊的總戰鬥力爲這些作戰隊伍戰鬥力的乘積。
比如:一支部隊的兵力爲5時的戰鬥力分析如下:
顯然,將部隊分爲2個作戰隊伍(一個爲2,另一個爲3),總的戰鬥力達到最大!情況
作戰安排
總的戰鬥力
1
1,1,1,1,1(共分爲5個作戰隊伍)
1*1*1*1*1=1
2
1,1,1,2 (共分爲4個作戰隊伍)
1*1*1*2=2
3
1,2,2 (共分爲3個作戰隊伍)
1*2*2=4
4
1,1,3 (共分爲3個作戰隊伍)
1*1*3=3
5
2,3 (共分爲2個作戰隊伍)
2*3=6
6
1,4 (共分爲2個作戰隊伍)
1*4=4
7
5 (共分爲1個作戰隊伍)
5=5
- 輸入
- 第一行: N表示有N組測試數據. (2<=N<=5)
接下來有N行,每行有一個整數Ti 代表趙國部隊的兵力. (1<=Ti<=1000) i=1,…N - 輸出
- 對於每一行測試數據,輸出佔一行,僅一個整數S,表示作戰安排的最大戰鬥力.
- 樣例輸入
-
2
-
5
-
4
- 樣例輸出
-
6
-
4
這道題就是一個數學題,然後將一個數分解成若干個3所組成的乘積會最大,然後餘1的時候和一個3組合成4,餘2就當成2,無非就是數比較大,要處理一下。
#include<bits/stdc++.h>
using namespace std;
int s[300];
int find(int x)
{
for(int k=0,i=0; i<=200; i++)
{
k=s[i]*x+k;
s[i]=k%10;
k=k/10;
}
}
int main()
{
int n;
scanf("%d",&n);
while(n--)
{
memset(s,0,sizeof(s));
int a,j;
scanf("%d",&a);
int b=a%3;
int c=a/3;
s[0]=1;
if(b==1)
c--;
for(int i=1; i<=c; i++)
{
find(3);
}
if(b==2)
find(2);
if(b==1)
find(4);
for(int i=200; i>=0; i--)
{
if(s[i]!=0)
{
j=i;
break;
}
}
for(int l=j; l>0; l--)
printf("%d",s[l]);
printf("%d\n",s[0]);
}
}