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
- 输入
- 第一行: N表示有N组测试数据. (2<=N<=5)
接下来有N行,每行有一个整数Ti 代表赵国部队的兵力. (1<=Ti<=1000) i=1,…N - 输出
- 对于每一行测试数据,输出占一行,仅一个整数S,表示作战安排的最大战斗力.
- 样例输入
-
2 5 4
- 样例输出
-
6 4
- 来源
- 第五届河南省程序设计大赛
-
1 /* 2 把一个数 N = 3^num + 2^b(b=0,1,2),此时 3^num*2^b最大 3 据说是强人观察出来的,无语了 4 */ 5 #include<stdio.h> 6 #include<string.h> 7 8 int ans[205]; 9 10 int multiply(int x)//大数乘小数 11 { 12 int i,j,k; 13 int temp = 0; 14 int c = 0; 15 for(i=0; i<200; i++) 16 { 17 temp = ans[i]*x+c; 18 ans[i] = temp%10; 19 c = temp/10; 20 } 21 } 22 23 int main() 24 { 25 int i,j,k; 26 int T; 27 scanf("%d",&T); 28 int num,n; 29 while(T--) 30 { 31 memset(ans,0,sizeof(ans)); 32 scanf("%d",&num); 33 n=num/3;//3的个数 34 ans[0]=1;//原来放在了multiply函数 35 if(num%3==1) //最后的1和3组成4,结果变大 36 n--; 37 38 for(i=0;i<n;i++) 39 multiply(3); 40 if(num%3==1) 41 multiply(4); 42 else if(num%3==2) 43 multiply(2); 44 45 for(i=200;i>=0;i--) 46 if(ans[i]) 47 break; 48 for(;i>0;i--) 49 printf("%d",ans[i]); 50 printf("%d\n",ans[0]); 51 } 52 return 0; 53 }
作者:火星十一郎
本文版权归作者火星十一郎所有,欢迎转载和商用,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利.