NYOJ 541

最強DE 戰鬥力

時間限制:1000 ms  |  內存限制:65535 KB
難度:3
描述

春秋戰國時期,趙國地大物博,資源非常豐富,人民安居樂業。但許多國家對它虎視眈眈,準備聯合起來對趙國發起一場戰爭。

顯然,面對多個國家的部隊去作戰,趙國的兵力明顯處於劣勢。戰鬥力是決定戰爭成敗的關鍵因素,一般來說,一支部隊的戰鬥力與部隊的兵力成正比。但當把一支部隊分成若干個作戰隊伍時,這個部隊的戰鬥力就會大大的增強。

一支部隊的戰鬥力是可以通過以下兩個規則計算出來的:

1.若一支作戰隊伍的兵力爲N,則這支作戰隊伍的戰鬥力爲N;

2.若將一支部隊分爲若干個作戰隊伍,則這支部隊的總戰鬥力爲這些作戰隊伍戰鬥力的乘積。

比如:一支部隊的兵力爲5時的戰鬥力分析如下:

情況

作戰安排

總的戰鬥力

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

    顯然,將部隊分爲2個作戰隊伍(一個爲2,另一個爲3),總的戰鬥力達到最大!
輸入
第一行: 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]);
    }
}


發佈了67 篇原創文章 · 獲贊 100 · 訪問量 14萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章