T36 计算多项式的值

描述

假定多项式的形式为xn+xn-1+…+x2+x+1,请计算给定单精度浮点数x和正整数n值的情况下这个多项式的值。

输入

输入仅一行,包括x和n,用单个空格隔开。x在float范围内,n <= 1000000。

输出

输出一个实数,即多项式的值,精确到小数点后两位。保证最终结果在float范围内。

  1. 样例输入
  2. 2.0
  3. 样例输出
  4. 31.00

样例

  1. #include<iostream>
  2. #include<cmath>
  3. #include<cstdio>
  4. using namespace std;
  5. float x,ans;
  6. int n;
  7. int main()
  8. {
  9. cin>>x>>n;
  10. for(int i=n;i>=;i--)
  11. ans+=pow(x,i);
  12. printf("%.2f",ans);
  13. }

T37 雇佣兵

描述

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

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

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

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

输入

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

输出

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

  1. 样例输入
  2.  
  3. 样例输出

样例

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

  1. #include<cstdio>
  2. #include<iostream>
  3. #include<cmath>
  4. using namespace std;
  5. int n,m,x,engry;
  6. int main()
  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<) break;
  14. engry+=floor(double (m)/engry);
  15. }
  16. cout<<engry;
  17. }

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) 相邻整数之间有单个空格。

  1. 样例输入
  2.  
  3. 样例输出

样例

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

输入      输出
测试点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,即求(3x³+2x²+1)的导数,

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

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

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

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

  1. #include<cstdio>
  2. using namespace std;
  3. int n,c;
  4. int main()
  5. {
  6. scanf("%d",&n);
  7. if(!n)
  8. {
  9. printf("");
  10. return ;
  11. }
  12. for(int i=n;i>;i--)
  13. {
  14. scanf("%d",&c);
  15. printf("%d ",c*i);
  16. }
  17. }

 T39 与7无关的数

描述

一个正整数,如果它能被7整除,或者它的十进制表示法中某一位上的数字为7,则称其为与7相关的数.现求所有小于等于n(n < 100)的与7无关的正整数的平方和.

输入

输入为一行,正整数n(n < 100)

输出

输出一行,包含一个整数,即小于等于n的所有与7无关的正整数的平方和。

  1. 样例输入
  2.  
  3. 样例输出

样例

  1. #include<cstdio>
  2. #include<iostream>
  3. using namespace std;
  4. int n,s;
  5. int main()
  6. {
  7. cin>>n;
  8. for(int i=;i<=n;i++)
  9. {
  10. if(i%==) continue;
  11. if(i%==) continue;
  12. if(i/==) continue;
  13. s+=i*i;
  14. }
  15. cout<<s;
  16. }

T40 数1的个数

描述

给定一个十进制正整数n,写下从1到n的所有整数,然后数一下其中出现的数字“1”的个数。

例如当n=2时,写下1,2。这样只出现了1个“1”;当n=12时,写下1,2,3,4,5,6,7,8,9,10,11,12。这样出现了5个“1”。

输入

正整数n。1 <= n <= 10000。

输出

一个正整数,即“1”的个数。

统计某个数出现了几次,可以每次%10(不要改变原数)判断它的末尾数是不是指定数,然后/10(改变原数),直至原数=0

  1. 样例输入
  2.  
  3. 样例输出

样例

  1. #include<cstdio>
  2. #include<iostream>
  3. using namespace std;
  4. int n,s;
  5. int main()
  6. {
  7. cin>>n;
  8. for(int i=;i<=n;i++)
  9. {
  10. int k=i;
  11. while(k)
  12. {
  13. if(k%==) s++;
  14. k/=;
  15. }
  16. }
  17. cout<<s;
  18. }

T41 数字统计

描述

请统计某个给定范围[L, R]的所有整数中,数字2出现的次数。

比如给定范围[2, 22],数字2在数2中出现了1次,在数12中出现1次,在数20中出现1次,在数21中出现1次,在数22中出现2次,所以数字2在该范围内一共出现了6次。

输入

输入共 1 行,为两个正整数 L 和 R,之间用一个空格隔开。

输出

输出共 1 行,表示数字 2 出现的次数。

  1. 样例输入
  2. 样例 #:
  3.  
  4. 样例 #:
  5.  
  6. 样例输出
  7. 样例 #:
  8.  
  9. 样例 #:

样例

思路与T40一样

  1. #include<cstdio>
  2. #include<iostream>
  3. using namespace std;
  4. int n,s,m;
  5. int main()
  6. {
  7. cin>>n>>m;
  8. for(int i=n;i<=m;i++)
  9. {
  10. int k=i;
  11. while(k)
  12. {
  13. if(k%==) s++;
  14. k/=;
  15. }
  16. }
  17. cout<<s;
  18. }

T42 画矩形

描述

根据参数,画出矩形。

输入

输入一行,包括四个参数:前两个参数为整数,依次代表矩形的高和宽(高不少于3行不多于10行,宽不少于5列不多于10列);第三个参数是一个字符,表示用来画图的矩形符号;第四个参数为1或0,0代表空心,1代表实心。

输出

输出画出的图形。

  1. 样例输入
  2. @
  3. 样例输出
  4. @@@@@@@
  5. @ @
  6. @ @
  7. @ @
  8. @ @
  9. @ @
  10. @@@@@@@

样例

  1. #include<cstdio>
  2. #include<iostream>
  3. using namespace std;
  4. int n,m,p;
  5. char c;
  6. int main()
  7. {
  8. cin>>n>>m>>c>>p;
  9. if(p)
  10. for(int i=;i<=n;i++)
  11. {
  12. for(int j=;j<=m;j++) cout<<c;
  13. cout<<endl;
  14. }
  15. else
  16. for(int i=;i<=n;i++)
  17. {
  18. for(int j=;j<=m;j++)
  19. if(i==||i==n||j==||j==m) cout<<c;
  20. else cout<<' ';
  21. cout<<endl;
  22. }
  23. }

T43 质因数分解

描述

已知正整数 n 是两个不同的质数的乘积,试求出较大的那个质数。

输入

输入只有一行,包含一个正整数 n。

对于60%的数据,6 ≤ n ≤ 1000。
对于100%的数据,6 ≤ n ≤ 2*10^9。

输出

输出只有一行,包含一个正整数 p,即较大的那个质数。

  1. 样例输入
  2.  
  3. 样例输出

样例

根据唯一分解定理,若此题有答案,则输入数据满足有且只有一组质数相乘=n

所以,i从2循环到根号n,如果n%i==0,则n/i为答案

也就是说,n=质数a*质数b,n没有其他的分解

证明:

假设还有另外一组分解c*d

那么c*d分解质因数的结果与a*b相同

因为a、b是质数

所以a*b分解质因数=a*b

所以c=a,d=b

所以只有一种分解

  1. #include<iostream>
  2. #include<cmath>
  3. using namespace std;
  4. int main()
  5. {
  6. int n;
  7. cin>>n;
  8. int t=sqrt(n);
  9. for(int i=;i<=t;i++)
  10. {
  11. if(n%i==)
  12. {
  13. cout<<n/i;
  14. return ;
  15. }
  16. }
  17. }

T44 第n小质数

描述

输入一个正整数n,求第n小的质数。

输入

一个不超过10000的正整数n。

输出

第n小的质数。

  1. 样例输入
  2.  
  3. 样例输出

样例

方法1:合数一定可以表示成一个比它小的质数的几倍,所以若一个数不能整除比它小的所有的质数,则这个数是质数。所以,若要找第n个质数,则可以第n-1个质数为起点开始,通过上述方法判断。测试耗时:431ms

  1. #include<iostream>
  2. using namespace std;
  3. int n,s;
  4. int p[];
  5. int pan(int t)
  6. {
  7. while()
  8. {
  9. bool ok=;
  10. for(int i=;i<=s;i++)//若它是质数,则不不能整除比它小的所有的质数
  11. if(t%p[i]==)
  12. {
  13. ok=;break;
  14. }
  15. if(ok)
  16. {
  17. t++;continue;
  18. }
  19. return t;
  20. }
  21. }
  22. int main()
  23. {
  24. cin>>n;
  25. p[]=;s++;//s表示当前质数数目
  26. for(int i=;i<=n;i++)
  27. {
  28. int t=p[s]+;//下一个质数的至少比上一个质数大1
  29. int h=pan(t);//确定下一个质数
  30. p[++s]=h;
  31. }
  32. cout<<p[n];
  33. }

1

方法2:是对方法1的改进,方法1中是判断不能整除所有比它小的质数,结合根号n复杂度判断质数的原理,例:15=3*5,枚举到3时判断了一次,5时又判断了一次,造成重复判断。所以判断能否整除比它小的所有的质数,仅需判断到根号n即可

  1. #include<cstdio>
  2. #include<cmath>
  3. using namespace std;
  4. int n,s;
  5. int p[];
  6. int devide(double k)
  7. {
  8. int x=(int)k;
  9. for(int i=;i<s;i++)
  10. {
  11. if(p[i]>=x)
  12. return i+;//因为开平方后的数k强制转化成了整数x,实际上x比k小了,所以要+1
  13. }
  14. }
  15. int main()
  16. {
  17. scanf("%d",&n);
  18. p[]=;p[]=;
  19. s=;
  20. while(s<n)
  21. {
  22. int tmp=p[s];//上一个质数
  23. s++;//当前要找的是第s个质数
  24. while()
  25. {
  26. tmp++;//至少比上一个质数大1
  27. bool ok=false;
  28. int test=devide(sqrt(tmp));//找到要判断的数开平方后处于哪两个质数之间
  29. for(int i=;i<=test;i++)
  30. if(tmp%p[i]==)
  31. {
  32. ok=true;
  33. break;
  34. }
  35. if(ok) continue;
  36. p[s]=tmp;
  37. break;
  38. }
  39. }
  40. printf("%d",p[n]);
  41. }

 T45 金币

描述

国王将金币作为工资,发放给忠诚的骑士。第一天,骑士收到一枚金币;之后两天(第二天和第三天)里,每天收到两枚金币;之后三天(第四、五、六天)里,每天收到三枚金币;之后四天(第七、八、九、十天)里,每天收到四枚金币……这种工资发放模式会一直这样延续下去:当连续N天每天收到N枚金币后,骑士会在之后的连续N+1天里,每天收到N+1枚金币(N为任意正整数)。

你需要编写一个程序,确定从第一天开始的给定天数内,骑士一共获得了多少金币。

输入

一个整数(范围1到10000),表示天数。

输出

骑士获得的金币数。

  1. 样例输入
  2.  
  3. 样例输出

样例

  1. #include<iostream>
  2. using namespace std;
  3. int n;
  4. int main()
  5. {
  6. cin>>n;
  7. int t=,s=,z=;//t表示当前每天可以得到几枚金币,s表示当前金币总数,z表示当前总天数
  8. while()
  9. {
  10. t++;
  11. if(t+z>n) break;
  12. //t=a既可以表示当前每天可以得到a枚金币,也可以表示得a枚金币的状态即将持续a天,注意是即将持续,也就是这a*a枚金币在这时还没有累积,而z是当前已经计算了的天数。当t+z>n时,也就是如果用a*a的当时累加,会使得到金币的天数>n,所以要break,通过后面的for循环一天一天的加。
  13. s+=t*t;//t*t为这t天一共可得的金币数
  14. z+=t;
  15. }
  16. for(int i=z+;i<=n;i++) s+=t;//当上面t+z=n时,不会break,累加一次t*t,此时恰好得了n天的金币,z=n,for循环条件不满足,不执行。
  17. cout<<s;
  18. }

noi题库(noi.openjudge.cn) 1.5编程基础之循环控制T36——T45的更多相关文章

  1. NOI题库刷题日志 (贪心篇题解)

    这段时间在NOI题库上刷了刷题,来写点心得和题解 一.寻找平面上的极大点 2704:寻找平面上的极大点 总时间限制:  1000ms  内存限制:  65536kB 描述 在一个平面上,如果有两个点( ...

  2. NOI题库 1768最大子矩阵 题解

    NOI题库 1768最大子矩阵  题解     总时间限制: 1000ms 内存限制: 65536kB   描述   已知矩阵的大小定义为矩阵中所有元素的和.给定一个矩阵,你的任务是找到最大的非空(大 ...

  3. NOI题库 09:图像旋转翻转变换

    NOI题库开始的题,也是略水,当然也是大水,所以彼此彼此 09:图像旋转翻转变换 总时间限制: 1000ms 内存限制: 65536kB 描述 给定m行n列的图像各像素点灰度值,对其依次进行一系列操作 ...

  4. NOI题库-小学奥赛QwQ

    今天Loli教育我们让我们来看看NOI题库的奥赛部分,不过,为何是小学的( ⊙ o ⊙ )啊!感觉智商被各种侮辱. 余数相同问题: 描述 已知三个正整数 a,b,c. 现有一个大于1的整数x,将其作为 ...

  5. noi题库(noi.openjudge.cn) 1.7编程基础之字符串T31——T35

    T31 字符串P型编码 描述 给定一个完全由数字字符('0','1','2',-,'9')构成的字符串str,请写出str的p型编码串.例如:字符串122344111可被描述为"1个1.2个 ...

  6. noi题库(noi.openjudge.cn) 1.7编程基础之字符串T21——T30

    T21:单词替换 描述 输入一个字符串,以回车结束(字符串长度<=100).该字符串由若干个单词组成,单词之间用一个空格隔开,所有单词区分大小写.现需要将其中的某个单词替换成另一个单词,并输出替 ...

  7. noi题库(noi.openjudge.cn) 1.8编程基础之多维数组T11——T20

    T11 图像旋转 描述 输入一个n行m列的黑白图像,将它顺时针旋转90度后输出. 输入 第一行包含两个整数n和m,表示图像包含像素点的行数和列数.1 <= n <= 100,1 <= ...

  8. noi题库(noi.openjudge.cn) 1.9编程基础之顺序查找T06——T15

    T06 笨小猴 描述 笨小猴的词汇量很小,所以每次做英语选择题的时候都很头疼.但是他找到了一种方法,经试验证明,用这种方法去选择选项的时候选对的几率非常大! 这种方法的具体描述如下:假设maxn是单词 ...

  9. noi题库(noi.openjudge.cn) 1.9编程基础之顺序查找T01——T05

    T01 查找特定元素的值 描述 在一个序列(下标从1开始)中查找一个给定的值,输出第一次出现的位置. 输入 第一行包含一个正整数n,表示序列中元素个数.1 <= n <= 10000.第二 ...

随机推荐

  1. git浅谈

    我们为什么要使用git 应用场景分析 1.使用svn,已经开发完一个需求,正在开发第二个需求,但是测试需要你立刻将你完成的第一个需求提交,请问现在你该怎么做: svn的解决方法大概是这样的:打开提交视 ...

  2. 简述MVC框架模式以及在你(Android)项目中的应用

    标题是阿里电话面试的问题,一直以为自己很清楚MVC模式,结果被问到时,居然没法将MVC和Android中各个组件对应起来,所以,面试肯定挂了,不过面试也是学习的一种方式,可以知道大公司看中什么,以及自 ...

  3. [20140829]spinlock导致cpu居高不下

    背景: 出现cpu高于常规的告警 排查: 1.开跟踪,没有发现cup特别高的查询 2.查看内核cpu使用量,看是否是sql server 端引起 3.查看负荷,是否负荷特别高这里使用 batch re ...

  4. Apache的Order Allow,Deny 详解

    Allow和Deny可以用于apache的conf文件或者.htaccess文件中(配合Directory, Location, Files等),用来控制目录和文件的访问授权. 所以,最常用的是: O ...

  5. winform 可拖动的自定义Label控件

    效果预览: 实现步骤如下: (1)首先在项目上右击选择:添加->新建项,添加自定义控件 (2)自定义的一个Label让它继承LabelControl控件,LabelControl控件是DevEx ...

  6. bootstrap简单的过一遍

    注:.xxxx 表示类(class=xxxx) <h1>到<h6>均可使用.另外还提供了.h1到.h6的class .lead可以让段落突出显示 <small>  ...

  7. putty-不输入密码直接登陆

    在桌面建立新的快捷方式,命令行填写如下: d:\soft\putty.exe -pw 你的口令 用户名@服务器地址注意更换你的putty.exe的路径,为了避免出错,这里有个窍门,你可以找到putty ...

  8. python curses使用

    python 中curses封装了c语言的curses,把c中复杂部分简单化,比如addstr(),mvaddstr(),mvwaddstr()合并成了一个addstr()方法. 一.语法入门 1.打 ...

  9. UVa 297 Quadtrees -SilverN

    A quadtree is a representation format used to encode images. The fundamental idea behind the quadtre ...

  10. 给深度学习入门者的Python快速教程 - 基础篇

    实在搞不定博客园的排版,排版更佳的版本在: https://zhuanlan.zhihu.com/p/24162430 Life is short, you need Python 人生苦短,我用Py ...