c语言noi试题计算2的幂,noi题库(noi.openjudge.cn) 1.5编程基础之循环控制T37——T38(示例代码)...

T37 雇佣兵

描述

雇佣兵的体力最大值为M,初始体力值为0、战斗力为N、拥有X个能量元素。

当雇佣兵的体力值恰好为M时,才可以参加一个为期M天的战斗期,战斗期结束体力值将为0。在同一个战斗期内,雇佣兵每连续战斗n天,战斗力就会上升1点,n为当前战斗期开始时的战斗力。

一个战斗期结束后,雇佣兵需要用若干个能量元素使其体力恢复到最大值M,从而参加下一个战斗期。每个能量元素恢复的体力值不超过当前的战斗力。每个能量元素只能使用一次。

请问:雇佣兵的战斗力最大可以到达多少。

输入

一行包括三个整数M、N、X,相邻两个整数之间用单个空格隔开。M、N、X均为不超过10000的正整数。

输出

输出一个整数,为雇佣兵的最大战斗力。

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

样例输入5 2 10样例输出6

样例

当精力n大于体力最大值m时,连续战斗n天的条件不能达到,所以循环条件是当前精力<=m&&x>0

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

1 #include

2 #include

3 #include

4 using namespacestd;5 intn,m,x,engry;6 intmain()7 {8 scanf("%d%d%d",&m,&n,&x);9 engry=n;//engry代表当前战斗力

10 while(engry<=m&&x)11 {12 x-=ceil(double (m)/engry);13 if(x<0) break;14 engry+=floor(double (m)/engry);15 }16 cout<

View Code

T38 计算多项式的导数

描述

计算多项式的导函数是一件非常容易的任务。给定一个函数f(x),我们用f‘(x)来表示其导函数。我们用x^n来表示x的n次幂。为了计算多项式的导函数,你必须知道三条规则:

(1)、(C)‘ = 0 如果C是常量

(2)、(C*x^n)‘ = C*n*x^(n-1) 如果n >= 1且C是常量

(3)、(f1(x)+f2(2))‘ = f1‘(x)+f2‘(x)

容易证明,多项式的导函数也是多项式。

现在,请你编写一个程序,给定一个不包含负系数且已合并好同幂次项的多项式f(x),计算出它的导函数。

输入

输入有两行。

第一行是一个整数n(0 <= n <= 100)表明多项式的最高次幂为n。

第二行包含n+1个非负整数,Cn ,Cn-1 ,Cn-2 ,Cn-3 ,Cn-4 ,… ,C1,C0(0 <= Ci <= 1000)且Cn != 0。Ci是幂次为i的项的系数。

输出

在一行内输出f‘(x)的结果。

(1) 如果g(x) = 0那么直接输出0

(2) 如果g(x)形如Cm(x^m)+Cm-1(x^(m-1))+…+C0(Cm!=0)那么输出Cm…C0

(3) 相邻整数之间有单个空格。

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

样例输入3

0

10

2

3 2 1

3

10 0 1 2样例输出0

6 2

30 0 1

样例

首先解释一下,本题样例输入输出有误,样例中的意思是第一行输入有几组数据,然后在按照题目中所说的输入,但实际测试数据中是按照题目描述设计的,即

输入      输出

测试点1:

0

10 ====> 0

测试点2:

2

3 2 1 ====> 6 2

测试点3:

3

10 0 1 2 ====> 30 0 1

然后这道题虽然是如此高大上的导数背景,但看输出格式只输出多项式的系数就是c*n(n从初始值依次递减至1).

以测试数据2为例:输入2,有n+1项,输入3 2 1,即求(3x3+2x2+1)的导数,

0.n若为0,根据规则1,直接输出0

1.根据规则3(f1(x)+f2(x))‘ = f1‘(x)+f2‘(x),所以原式的导数=3x2的导数+2x2的导数+1的导数

2.根据规则1和2:所以1中的式子=3*2*x的1次方+2*1*x的0次方+0

3.观察样例可以得到,最后一个0不输出,所以输出的数就是输入的每个c依次乘n(n每次减1)

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

1 #include

2 using namespacestd;3 intn,c;4 intmain()5 {6 scanf("%d",&n);7 if(!n)8 {9 printf("0");10 return 0;11 }12 for(int i=n;i>0;i--)13 {14 scanf("%d",&c);15 printf("%d",c*i);16 }17 }

View Code

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值