文章目录

  • 01:求平均年龄
  • 02:财务管理
  • 03:均值
  • 04:求整数的和与均值
  • 05:最高的分数
  • 06:整数序列的元素最大跨度值
  • 07:奥运奖牌计数
  • 08:多边形内角和
  • 09:奇数求和
  • 10:满足条件的数累加
  • 11:整数的个数
  • 12:与指定数字相同的数的个数
  • 13:乘方计算
  • 14:人口增长问题
  • 15:银行利息
  • 16:买房子
  • 17:菲波那契数列
  • 18:鸡尾酒疗法
  • 19:救援
  • 20:球弹跳高度的计算
  • 21:角谷猜想
  • 22:津津的储蓄计划
  • 23:药房管理
  • 24:正常血压
  • 25:求特殊自然数
  • 26:统计满足条件的4位数个数
  • 27:级数求和
  • 28:分离整数的各个数位
  • 29:数字反转
  • 30:含k个3的数
  • 31:开关灯
  • 32:求分数序列和
  • 33:计算分数加减表达式的值
  • 34:求阶乘的和
  • 35:求出e的值
  • 36:计算多项式的值
  • 37:雇佣兵
  • 38:计算多项式的导函数
  • 39:与7无关的数
  • 40:数1的个数
  • 41:数字统计
  • 42:画矩形
  • 43:质因数分解
  • 44:第n小的质数
  • 45:金币

01:求平均年龄

原题链接

总时间限制: 1000ms 内存限制: 65536kB

描述

班上有学生若干名,给出每名学生的年龄(整数),求班上所有学生的平均年龄,保留到小数点后两位。

输入

第一行有一个整数n(1<= n <= 100),表示学生的人数。其后n行每行有1个整数,表示每个学生的年龄,取值为15到25。

输出

输出一行,该行包含一个浮点数,为要求的平均年龄,保留到小数点后两位。

样例输入

2
18
17

样例输出

17.50

参考程序

#include <iostream>
#include <cstdio>
using namespace std;int main(){int n;float a,sum=0;cin>>n;for(int i=0; i<n; i++){cin>>a;sum+=a;}printf("%.2f",sum/n);return 0;
}

02:财务管理

原题链接

总时间限制: 1000ms 内存限制: 65536kB

描述

Larry今年毕业并找到了一份工作。他赚很多钱,但似乎总是不够。Larry认为他需要控制他的投资以解决自己的财务问题。Larry拿到了自己的银行账户详单,想看看自己有多少钱。请帮助Larry写一个程序,通过过去12个月中每月的月末结余,计算平均结余。

输入

输入包含12行,每行包含一个数,为某个月的结余。每个数都是不大于1,000,000的正数,保留两位小数,省略"$"符。

输出

输出一个数,为这12个月的平均月末结余,保留到小数点后第二位,并在最前面加一个"$"符。

样例输入

100.00
489.12
12454.12
1234.10
823.05
109.20
5.27
1542.25
839.18
83.99
1295.01
1.75

样例输出

$1581.42

参考程序

#include <iostream>
#include <cstdio>
using namespace std;int main(){float a,sum=0;for(int i=0; i<12; i++){cin>>a;sum+=a;}printf("$%.2f",sum/12);return 0;
}

03:均值

原题链接

总时间限制: 1000ms 内存限制: 65536kB

描述

给出一组样本数据,计算其均值。

输入

输入有两行,第一行包含一个整数n(n小于100),代表样本容量;第二行包含n个绝对值不超过1000的浮点数,代表各个样本数据。

输出

输出一行,包含一个浮点数,表示均值,精确到小数点后4位。

样例输入

2
1.0 3.0

样例输出

2.0000

参考程序

#include <iostream>
#include <cstdio>
using namespace std;int main(){int n;float a,sum;cin>>n;for(int i=0; i<n; i++){cin>>a;sum+=a;}printf("%.4f",sum/n);return 0;
}

04:求整数的和与均值

原题链接

总时间限制: 1000ms 内存限制: 65536kB

描述

读入n(1 <= n <= 10000)个整数,求它们的和与均值。

输入

输入第一行是一个整数n,表示有n个整数。
第2~n+1行每行包含1个整数。每个整数的绝对值均不超过10000。

输出

输出一行,先输出和,再输出平均值(保留到小数点后5位),两个数间用单个空格分隔。

样例输入

4
344
222
343
222

样例输出

1131 282.75000

参考程序

#include <iostream>
#include <cstdio>
using namespace std;int main(){int n,a;long sum=0;cin>>n;for(int i=0; i<n; i++){cin>>a;sum+=a;}printf("%ld %.5lf",sum,(double)sum/n);return 0;
}

05:最高的分数

原题链接

总时间限制: 1000ms 内存限制: 65536kB

描述

孙老师讲授的《计算概论》这门课期中考试刚刚结束,他想知道考试中取得的最高分数。因为人数比较多,他觉得这件事情交给计算机来做比较方便。你能帮孙老师解决这个问题吗?

输入

输入两行,第一行为整数n(1 <= n < 100),表示参加这次考试的人数.第二行是这n个学生的成绩,相邻两个数之间用单个空格隔开。所有成绩均为0到100之间的整数。

输出

输出一个整数,即最高的成绩。

样例输入

5
85 78 90 99 60

样例输出

99

参考程序

#include <iostream>
using namespace std;int main(){int n,a,maxa=0;cin>>n;for(int i=0; i<n; i++){cin>>a;if(a>maxa)maxa = a;}cout<<maxa;return 0;
}

06:整数序列的元素最大跨度值

原题链接

总时间限制: 1000ms 内存限制: 65536kB

描述

给定一个长度为n的非负整数序列,请计算序列的最大跨度值(最大跨度值 = 最大值减去最小值)。

输入

一共2行,第一行为序列的个数n(1 <= n <= 1000),第二行为序列的n个不超过1000的非负整数,整数之间以一个空格分隔。

输出

输出一行,表示序列的最大跨度值。

样例输入

6
3 0 8 7 5 9

样例输出

9

参考程序

#include <iostream>
#include <cstdio>
using namespace std;int main(){int n,a,maxa=0,mina=1001;cin>>n;for(int i=0; i<n; i++){cin>>a;if(a>maxa)maxa = a;if(a<mina)mina = a;}cout<<(maxa-mina);return 0;
}

07:奥运奖牌计数

原题链接

总时间限制: 1000ms 内存限制: 65536kB

描述

2008年北京奥运会,A国的运动员参与了n天的决赛项目(1≤n≤17)。现在要统计一下A国所获得的金、银、铜牌数目及总奖牌数。

输入

输入n+1行,第1行是A国参与决赛项目的天数n,其后n行,每一行是该国某一天获得的金、银、铜牌数目,以一个空格分开。

输出

输出1行,包括4个整数,为A国所获得的金、银、铜牌总数及总奖牌数,以一个空格分开。

样例输入

3
1 0 3
3 1 0
0 3 0

样例输出

4 4 3 11

参考程序

#include <iostream>
#include <cstdio>
using namespace std;int main(){int n,a,b,c,suma=0,sumb=0,sumc=0;cin>>n;for(int i=0; i<n;i++){cin>>a>>b>>c;suma+=a;sumb+=b;sumc+=c;}printf("%d %d %d %d",suma,sumb,sumc,(suma+sumb+sumc));return 0;
}

08:多边形内角和

原题链接

总时间限制: 1000ms 内存限制: 65536kB

描述

在欧几里德几何中,n边形的内角和是(n-2)*180°。已知其中(n-1)个内角的度数,就能计算出剩下的一个未知内角的度数。请编写一个程序,来解决这个问题。

输入

第1行只有一个整数n(2第2行有(n-1)个正整数,是每个已知内角的度数。相邻两个整数之间用单个空格隔开。
数据保证给定多边形合法。

输出

一个正整数,为未知内角的度数。

样例输入

3
45 60

样例输出

75

参考程序

#include <iostream>
#include <cstdio>
using namespace std;int main(){int n,d,degree;cin>>n;degree = (n-2)*180;for(int i=0; i<n-1; i++){cin>>d;degree-=d;}cout<<degree;return 0;
}

09:奇数求和

原题链接

总时间限制: 1000ms 内存限制: 65536kB

描述

计算非负整数 m 到 n(包括m 和 n )之间的所有奇数的和,其中,m 不大于 n,且n 不大于300。例如 m=3, n=12, 其和则为:3+5+7+9+11=35。

输入

两个数 m 和 n,两个数以一个空格分开,其中 0 <= m <= n <= 300 。

输出

输出一行,包含一个整数,表示m 到 n(包括m 和 n )之间的所有奇数的和

样例输入

7 15

样例输出

55

参考程序

#include <iostream>
using namespace std;
int main()
{int m,n,i,sum=0;cin>>m>>n;for(i=m;i<=n;i++){if(i%2==1){sum+=i;                //如果为奇数,则相加}}cout<<sum;return 0;
}

10:满足条件的数累加

原题链接

总时间限制: 1000ms 内存限制: 65536kB

描述

将正整数 m 和 n 之间(包括 m 和 n)能被 17 整除的数累加。其中,0 < m < n < 1000。

输入

一行,包含两个整数m和n,其间,以一个空格间隔。

输出

输出一行,包行一个整数,表示累加的结果。

样例输入

50 85

样例输出

204

参考程序

#include <iostream>
using namespace std;
int main()
{int m,n,i,sum=0;cin>>m>>n;for(i=m;i<=n;i++){if(i%17==0)                //找到能被17整除的数{sum+=i;                //相加}    }cout<<sum;return 0;
}

11:整数的个数

原题链接

总时间限制: 1000ms 内存限制: 65536kB

描述

给定k(1< k < 100)个正整数,其中每个数都是大于等于1,小于等于10的数。写程序计算给定的k个正整数中,1,5和10出现的次数。

输入

输入有两行:第一行包含一个正整数k,第二行包含k个正整数,每两个正整数用一个空格分开。

输出

输出有三行,第一行为1出现的次数,,第二行为5出现的次数,第三行为10出现的次数。

样例输入

5
1 5 8 10 5

样例输出

1
2
1

参考程序

#include <iostream>
#include <cstdio>
using namespace std;int main(){int n,a,sum_1=0,sum_5=0,sum_10=0;cin>>n;for(int i=0; i<n; i++){cin>>a;if(a==1)sum_1++;if(a==5)sum_5++;if(a==10)sum_10++;}printf("%d\n%d\n%d\n",sum_1,sum_5,sum_10);return 0;
}

12:与指定数字相同的数的个数

原题链接

总时间限制: 1000ms 内存限制: 65536kB

描述

输出一个整数序列中与指定数字相同的数的个数。

输入

输入包含2行:
第1行为N和m,表示整数序列的长度(N <= 100)和指定的数字, 中间用一个空格分开;
第2行为N个整数,整数之间以一个空格分开。

输出

输出为N个数中与m相同的数的个数。

样例输入

3 2
2 3 2

样例输出

2

参考程序

#include <iostream>
#include <cstdio>
using namespace std;int main(){int n,m,a,sum=0;cin>>n>>m;for(int i=0;i<n;i++){cin>>a;if(a==m)sum++;}cout<<sum;return 0;
}

13:乘方计算

原题链接

总时间限制: 1000ms 内存限制: 65536kB

描述

给出一个整数a和一个正整数n,求乘方an。

输入

一行,包含两个整数a和n。-1000000 <= a <= 1000000,1 <= n <= 10000。

输出

一个整数,即乘方结果。题目保证最终结果的绝对值不超过1000000。

样例输入

2 3

样例输出

8

参考程序

#include <iostream>
using namespace std;
int main ()
{int a,i,n,s=1;cin>>a>>n;for(i=1;i<=n;i++)s=s*a;cout<<s;return 0;
}

14:人口增长问题

原题链接

总时间限制: 1000ms 内存限制: 65536kB

描述

我国现有x亿人口,按照每年0.1%的增长速度,n年后将有多少人?

输入

一行,包含两个整数x和n,分别是人口基数和年数,以单个空格分隔。

输出

输出最后的人口数,以亿为单位,保留到小数点后四位。1 <= x <= 100, 1 <= n <= 100。

样例输入

13 10

样例输出

13.1306

参考程序

#include <iostream>
#include <cstdio>
using namespace std;int main(){float x,n;cin>>x>>n;for(int i=0;i<n;i++){x+=x*0.001;}printf("%.4f",x);return 0;
}

15:银行利息

原题链接

总时间限制: 1000ms 内存限制: 65536kB

描述

农夫约翰在去年赚了一大笔钱!他想要把这些钱用于投资,并对自己能得到多少收益感到好奇。已知投资的复合年利率为R(0到20之间的整数)。约翰现有总值为M的钱(100到1,000,000之间的整数)。他清楚地知道自己要投资Y年(范围0到400)。请帮助他计算最终他会有多少钱,并输出它的整数部分。数据保证输出结果在32位有符号整数范围内。

输入

一行包含三个整数R,M,Y,相邻两个整数之间用单个空格隔开。

输出

一个整数,即约翰最终拥有多少钱(整数部分)。

样例输入

5 5000 4

样例输出

6077

提示

在样例中,
第一年后: 1.05 * 5000 = 5250
第二年后: 1.05 * 5250 = 5512.5
第三年后: 1.05 * 5512.50 = 5788.125
第四年后: 1.05 * 5788.125 = 6077.53125
6077.53125的整数部分为6077。

参考程序

#include <iostream>
using namespace std;
int main()
{int r,y,i;double s,m;cin>>r>>m>>y;for(i=0;i<y;i++)m*=(1+0.01*r);cout<<(int)m;                //把m强制转换成int类型return 0;
}

16:买房子

原题链接

总时间限制: 1000ms 内存限制: 65536kB

描述

某程序员开始工作,年薪N万,他希望在中关村公馆买一套60平米的房子,现在价格是200万,假设房子价格以每年百分之K增长,并且该程序员未来年薪不变,且不吃不喝,不用交税,每年所得N万全都积攒起来,问第几年能够买下这套房子?(第一年年薪N万,房价200万)

输入

一行,包含两个正整数N(10 <= N <= 50), K(1 <= K <= 20),中间用单个空格隔开。

输出

如果在第20年或者之前就能买下这套房子,则输出一个整数M,表示最早需要在第M年能买下,否则输出Impossible。

样例输入

50 10

样例输出

8

参考程序

#include <iostream>
#include <cstdio>
using namespace std;int main(){float N,K,sum=200,sumN,sumy=1;cin>>N>>K;sumN=N;while(sumN<sum){sumN+=N;sum+=sum*(K*0.01);sumy++;if(sumy>20)break;}if(sumy<20)cout<<sumy;elsecout<<"Impossible";return 0;}

17:菲波那契数列

原题链接

总时间限制: 1000ms 内存限制: 65536kB

描述

菲波那契数列是指这样的数列: 数列的第一个和第二个数都为1,接下来每个数都等于前面2个数之和。
给出一个正整数k,要求菲波那契数列中第k个数是多少。

输入

输入一行,包含一个正整数k。(1 <= k <= 46)

输出

输出一行,包含一个正整数,表示菲波那契数列中第k个数的大小

样例输入

19

样例输出

4181

参考程序

#include <iostream>
#include <cstdio>
using namespace std;int main(){int k,a1=1,a2=1,a3; //a1 a2 a3作为滑动窗口cin>>k;if( k==1 || k==2 ){cout<<1;}else{for(int i=3;i<=k;i++){a3 = a1+a2;a1 = a2;a2 = a3;}cout<<a3;}
}

18:鸡尾酒疗法

原题链接

总时间限制: 1000ms 内存限制: 65536kB

描述

鸡尾酒疗法,原指“高效抗逆转录病毒治疗”(HAART),由美籍华裔科学家何大一于1996年提出,是通过三种或三种以上的抗病毒药物联合使用来治疗艾 滋病。该疗法的应用可以减少单一用药产生的抗药性,最大限度地抑制病毒的复制,使被破坏的机体免疫功能部分甚至全部恢复,从而延缓病程进展,延长患者生 命,提高生活质量。人们在鸡尾酒疗法的基础上又提出了很多种改进的疗法。为了验证这些治疗方法是否在疗效上比鸡尾酒疗法更好,可用通过临床对照实验的方式 进行。假设鸡尾酒疗法的有效率为x,新疗法的有效率为y,如果y-x大于5%,则效果更好,如果x-y大于5%,则效果更差,否则称为效果差不多。下面给 出n组临床对照实验,其中第一组采用鸡尾酒疗法,其他n-1组为各种不同的改进疗法。请写程序判定各种改进疗法效果如何。

输入

第一行为整数n( 1 < n <= 20);
其余n行每行两个整数,第一个整数是临床实验的总病例数(小于等于10000),第二个疗效有效的病例数。
这n行数据中,第一行为鸡尾酒疗法的数据,其余各行为各种改进疗法的数据。

输出

有n-1行输出,分别表示对应改进疗法的效果:
如果效果更好,输出better;如果效果更差,输出worse;否则输出same

样例输入

5
125 99
112 89
145 99
99 97
123 98

样例输出

same
worse
better
same

参考程序

#include <iostream>
#include <cstdio>
using namespace std;int main(){int n;int sum,active,H_sum,H_active;float x,y;cin>>n;cin>>H_sum>>H_active;x = (float)H_active/H_sum;for(int i=0;i<n-1;i++){cin>>sum>>active;y = (float)active/sum;if(y-x>0.05)cout<<"better"<<endl;else if(x-y>0.05)cout<<"worse\n"<<endl;elsecout<<"same\n"<<endl;}return 0;
}

19:救援

原题链接

总时间限制: 1000ms 内存限制: 65536kB

描述

救生船从大本营出发,营救若干屋顶上的人回到大本营,屋顶数目以及每个屋顶的坐标
和人数都将由输入决定,求出所有人都到达大本营并登陆所用的时间。

在直角坐标系的原点是大本营,救生船每次从大本营出发,救了人之后将人送回大本营。坐标系中的点代表屋顶,每个屋顶由其位置坐标和其上的人数表 示。救生船每次从大本营出发,以速度50 米/分钟驶向下一个屋顶,达到一个屋顶后,救下其上的所有人,每人上船1 分钟,船原路返回,达到大本营,每人下船0.5 分钟。假设原点与任意一个屋顶的连线不穿过其它屋顶。

输入

第一行,一个整数,表示屋顶数n。
接下来依次有n 行输入,每一行上包含两个表示屋顶相对于大本营的平面坐标位置的实数(单位是米)、一个表示人数的整数,数之间以一个空格分
开。

输出

一行,救援需要的总时间,精确到分钟 (向上取整)。

样例输入

1
30 40 3

样例输出

7

参考程序

#include <iostream>
#include <cstdio>
#include <cmath>
using namespace std;int main(){int n;float x,y,num;  //屋顶坐标与对应人数float time=0;cin>>n;for(int i=0;i<n;i++){cin>>x>>y>>num;time+=2*sqrt(x*x+y*y)/50+1.5*num;}cout<<ceil(time);     //ceil向上取整,取大于或等于它本身的整数,需包含<cmath>return 0;
}

20:球弹跳高度的计算

原题链接

总时间限制: 1000ms 内存限制: 65536kB

描述

一球从某一高度落下(整数,单位米),每次落地后反跳回原来高度的一半,再落下。
编程计算气球在第10次落地时,共经过多少米? 第10次反弹多高?

输入

输入一个整数h,表示球的初始高度。

输出

输出包含两行:
第1行:到球第10次落地时,一共经过的米数。
第2行:第10次弹跳的高度。

注意:结果可能是实数,结果用double类型保存。
提示:输出时不需要对精度特殊控制,用cout << ANSWER,或者printf("%g", ANSWER)即可。

样例输入

20

样例输出

59.9219
0.0195313

参考程序

#include <iostream>
#include <cstdio>
using namespace std;int main(){double h,sum=0;cin>>h;sum = h;for(int i=0;i<9;i++){h/=2;sum+=h*2;}cout<<sum<<endl<<h/2;return 0;
}




以下题解未写



21:角谷猜想

原题链接

总时间限制: 1000ms 内存限制: 65536kB

描述

所谓角谷猜想,是指对于任意一个正整数,如果是奇数,则乘3加1,如果是偶数,则除以2,得到的结果再按照上述规则重复处理,最终总能够得到1。如,假定初始整数为5,计算过程分别为16、8、4、2、1。
程序要求输入一个整数,将经过处理得到1的过程输出来。

输入

一个正整数N(N <= 2,000,000)

输出

从输入整数到1的步骤,每一步为一行,每一部中描述计算过程。最后一行输出"End"。如果输入为1,直接输出"End"。

样例输入

5

样例输出

5*3+1=16
16/2=8
8/2=4
4/2=2
2/2=1
End

参考程序

#include <iostream>
#include <cstdio>
using namespace std;int main(){long N;     //N在运算过程中可能超过int范围cin>>N;while(N!=1){if(N%2==1){printf("%ld*3+1=%ld\n",N,N*3+1);N = N*3+1;}else{printf("%ld/2=%ld\n",N,N/2);N = N/2;}}cout<<"End";return 0;
}

22:津津的储蓄计划

原题链接

总时间限制: 1000ms 内存限制: 65536kB

描述

津津的零花钱一直都是自己管理。每个月的月初妈妈给津津300元钱,津津会预算这个月的花销,并且总能做到实际花销和预算的相同。

为了让津津学习如何储蓄,妈妈提出,津津可以随时把整百的钱存在她那里,到了年末她会加上20%还给津津。因此津津制定了一个储蓄计划:每个月的月初,在得到妈妈给的零花钱后,如果她预计到这个月的月末手中还会有多于100元或恰好100元,她就会把整百的钱存在妈妈那里,剩余的钱留在自己手中。

例如11月初津津手中还有83元,妈妈给了津津300元。津津预计11月的花销是180元,那么她就会在妈妈那里存200元,自己留下183元。到了11月月末,津津手中会剩下3元钱。

津津发现这个储蓄计划的主要风险是,存在妈妈那里的钱在年末之前不能取出。有可能在某个月的月初,津津手中的钱加上这个月妈妈给的钱,不够这个月的原定预算。如果出现这种情况,津津将不得不在这个月省吃俭用,压缩预算。

现在请你根据2004年1月到12月每个月津津的预算,判断会不会出现这种情况。如果不会,计算到2004年年末,妈妈将津津平常存的钱加上20%还给津津之后,津津手中会有多少钱。

输入

包括12行数据,每行包含一个小于350的非负整数,分别表示1月到12月津津的预算。

输出

包括一行,这一行只包含一个整数。如果储蓄计划实施过程中出现某个月钱不够用的情况,输出-X,X表示出现这种情况的第一个月;否则输出到2004年年末津津手中会有多少钱。

样例输入

样例 #1:
290
230
280
200
300
170
340
50
90
80
200
60样例 #2:
290
230
280
200
300
170
330
50
90
80
200
60

样例输出

样例 #1:
-7样例 #2:
1580

参考程序

#include <iostream>
#include <cstdio>
using namespace std;int main(){int temp=0,sum=0,cost;  //temp手中余额,sum储蓄额,cost每月花费for(int i=1;i<=12;i++){temp+=300;          //每月余额都加上零花钱cin>>cost;if(temp-cost<0){    //手中余额不够,则储蓄失败printf("-%d",i);return 0;}temp -= cost;       //去除每月花费if(temp/100!=0){    //若有整百剩余,则储蓄sum += temp/100*100;    temp -= temp/100*100;}}cout<<(temp+sum*1.2);return 0;
}

23:药房管理

原题链接

总时间限制: 1000ms 内存限制: 65536kB

描述

随着信息技术的蓬勃发展,医疗信息化已经成为医院建设中必不可少的一部分。计算机可以很好地辅助医院管理医生信息、病人信息、药品信息等海量数据,使工作人员能够从这些机械的工作中解放出来,将更多精力投入真正的医疗过程中,从而极大地提高了医院整体的工作效率。
对药品的管理是其中的一项重要内容。现在药房的管理员希望使用计算机来帮助他管理。假设对于任意一种药品,每天开始工作时的库存总量已 知,并且一天之内不会通过进货的方式增加。每天会有很多病人前来取药,每个病人希望取走不同数量的药品。如果病人需要的数量超过了当时的库存量,药房会拒 绝该病人的请求。管理员希望知道每天会有多少病人没有取上药。

输入

共3行
第一行是每天开始时的药品总量m
第二行是这一天取药的人数n(0 < n <= 100)
第三行共有n个数,分别记录了每个病人希望取走的药品数量(按照时间先后的顺序),两数之间以空格分隔

输出

只有1行,为这一天没有取上药品的人数。

样例输入

30
6
10 5 20 6 7 8

样例输出

2

参考程序

#include <iostream>
using namespace std;int main(){int num=0;  //没取上药的人数int m,n,a;  //a为每个人取药的数量cin>>m>>n;for(int i=0;i<n;i++){cin>>a; if(m<a)     //若药的数量不够,则人数加一num++;else        //反之,取药,药的数量减少m -= a;}cout<<num;return 0;
}

24:正常血压

原题链接

总时间限制: 1000ms 内存限制: 65536kB

描述

监护室每小时测量一次病人的血压,若收缩压在90 - 140之间并且舒张压在60 - 90之间(包含端点值)则称之为正常,现给出某病人若干次测量的血压值,计算病人保持正常血压的最长小时数。

输入

第一行为一个正整数n,n < 100
其后有n行,每行2个正整数,分别为一次测量的收缩压和舒张压,中间以一个空格分隔。

输出

输出仅一行,血压连续正常的最长小时数。

样例输入

4
100 80
90 50
120 60
140 90

样例输出

2

参考程序

#include <iostream>
#include <cstdio>
using namespace std;int main(){int n,maxnum=0,num=0;   //分别为测量次数,最大时长,时长int press_high,press_low;   //血压数cin>>n;for(int i=0;i<n;i++){cin>>press_high>>press_low;if(press_high>=90 && press_high<=140 && press_low >=60 && press_low <=90)num++;      //范围正常,累加else{       //范围不正常,比较最大时长maxnum = num>maxnum?num:maxnum;num = 0;}}maxnum = num>maxnum?num:maxnum;     //最后也需要比较一次cout<<maxnum;return 0;
}

25:求特殊自然数

原题链接

总时间限制: 1000ms 内存限制: 65536kB

描述

一个十进制自然数,它的七进制与九进制表示都是三位数,且七进制与九进制的三位数码表示顺序正好相反。编程求此自然数,并输出显示。

输入

无。

输出

三行:
第一行是此自然数的十进制表示;
第二行是此自然数的七进制表示;
第三行是此自然数的九进制表示。

样例输入

(无)

样例输出

(不提供)

参考程序

#include <iostream>
using namespace std;int main(){for(int i=100;i<1000;i++){ //除基取余法进行进制转换if(i%9==i/7/7%7 && i/9%9==i/7%7 && i/9/9%9==i%7){cout<<i<<endl;cout<<i/7/7%7<<i/7%7<<i%7<<endl;cout<<i/9/9%9<<i/9%9<<i%9<<endl;return 0;}}
}

26:统计满足条件的4位数个数

原题链接

总时间限制: 1000ms 内存限制: 65536kB

描述

给定若干个四位数,求出其中满足以下条件的数的个数:

个位数上的数字减去千位数上的数字,再减去百位数上的数字, 再减去十位数上的数字的结果大于零。

输入

输入为两行,第一行为四位数的个数n,第二行为n个的四位数,数与数之间以一个空格分开。(n <= 100)

输出

输出为一行,包含一个整数,表示满足条件的四位数的个数。

样例输入

5
1234 1349 6119 2123 5017

样例输出

3

参考程序

#include <iostream>
#include <cstdio>
using namespace std;int main(){int n,num=0,a;cin>>n;for(int i=0;i<n;i++){cin>>a;if(a%10-a/1000-a%1000/100-a%100/10>0)num++;}cout<<num;return 0;
}

27:级数求和

原题链接

总时间限制: 1000ms 内存限制: 65536kB

描述

已知:Sn= 1+1/2+1/3+…+1/n。显然对于任意一个整数K,当n足够大的时候,Sn大于K。

现给出一个整数K(1<=k<=15),要求计算出一个最小的n;使得Sn>K。

输入

一个整数K。

输出

一个整数n。

样例输入

1

样例输出

2

参考程序

#include <iostream>
using namespace std;int main(){double S=0,K,n=0;cin>>K;while(K>=S){n++;S += 1/n;}cout<<n;return 0;
}

28:分离整数的各个数位

原题链接

总时间限制: 1000ms 内存限制: 65536kB

描述

给定一个整数,要求从个位开始分离出它的每一位数字。

输入

输入一个整数,整数在1到100000000之间。

输出

从个位开始按照从低位到高位的顺序依次输出每一位数字。数字之间以一个空格分开。

样例输入

123

样例输出

3 2 1

参考程序

#include <iostream>
using namespace std;int main(){long a;cin>>a;while(a>0){cout<<a%10<<" ";a /= 10;}
}

29:数字反转

原题链接

总时间限制: 1000ms 内存限制: 65536kB

描述

给定一个整数,请将该数各个位上数字反转得到一个新数。新数也应满足整数的常见形式,即除非给定的原数为零,否则反转后得到的新数的最高位数字不应为零(参见样例2)。

输入

输入共 1 行,一个整数N。

-1,000,000,000 ≤ N≤ 1,000,000,000。

输出

输出共 1 行,一个整数,表示反转后的新数。

样例输入

样例 #1:
123样例 #2:
-380

样例输出

样例 #1:
321样例 #2:
-83

参考程序

#include <iostream>
using namespace std;int main(){long a,a_turn=0;    //反转后的值bool isNegative=false;  //是否为负数的标记cin>>a;if(a<0){a=-a;isNegative = true;}while(a>0){a_turn = a_turn*10+a%10;a /= 10;}if(isNegative)cout<<-a_turn;elsecout<<a_turn;return 0;
}

30:含k个3的数

原题链接

总时间限制: 1000ms 内存限制: 65536kB

描述

输入两个正整数 m 和 k,其中1 < m < 100000,1 < k < 5 ,判断 m 能否被19整除,且恰好含有k个3,如果满足条件,则输出YES,否则,输出NO。

例如,输入:
43833 3
满足条件,输出YES。

如果输入:
39331 3
尽管有3个3,但不能被19整除,也不满足条件,应输出NO。

输入

m 和 k 的值,中间用单个空格间隔。

输出

满足条件时输出 YES,不满足时输出 NO。

样例输入

43833 3

样例输出

YES

参考程序

#include <iostream>
using namespace std;int main(){int m,k;cin>>m>>k;if(m%19==0){        //判断是否整除while(m>0){if(m%10==3)k--;        //判断是否有足够数量的3m /= 10;}}if(k)cout<<"NO";elsecout<<"YES";return 0;
}

31:开关灯

原题链接

总时间限制: 1000ms 内存限制: 65536kB

描述

假设有N盏灯(N为不大于5000的正整数),从1到N按顺序依次编号,初始时全部处于开启状态;有M个人(M为不大于N的正整数)也从1到M依次编号。

第一个人(1号)将灯全部关闭,第二个人(2号)将编号为2的倍数的灯打开,第三个人(3号)将编号为3的倍数的灯做相反处理(即,将打开的灯关闭,将关闭的灯打开)。依照编号递增顺序,以后的人都和3号一样,将凡是自己编号倍数的灯做相反处理。

请问:当第M个人操作之后,哪几盏灯是关闭的,按从小到大输出其编号,其间用逗号间隔。

输入

输入正整数N和M,以单个空格隔开。

输出

顺次输出关闭的灯的编号,其间用逗号间隔。

样例输入

10 10

样例输出

1,4,9

参考程序

//不使用数组
#include <iostream>
using namespace std;
int main()
{int N,M;bool s;     //记录灯的状态cin>>N>>M;for(int i=1; i<=N; i++) //外层循环:N盏灯{s = true;    //每盏灯初始都是开启的for(int j=1; j<=i&&j<=M; j++)   //内层循环:M个人{if(i%j==0)  //若为倍数,则改变灯的状态{s = !s;}}if(!s)      //若灯饰关闭的,则输出{if(i==1)cout<<i;    //对第一个输出做特殊处理elsecout<<","<<i;}}return 0;
}

32:求分数序列和

原题链接

总时间限制: 1000ms 内存限制: 65536kB

描述

有一个分数序列 q1/p1,q2/p2,q3/p3,q4/p4,q5/p5,… ,其中qi+1= qi+ pi, pi+1=qi, p1= 1, q1= 2。比如这个序列前6项分别是2/1,3/2,5/3,8/5,13/8,21/13。求这个分数序列的前n项之和。

输入

输入有一行,包含一个正整数n(n <= 30)。

输出

输出有一行,包含一个浮点数,表示分数序列前n项的和,精确到小数点后4位。

样例输入

2

样例输出

3.5000

参考程序

#include <iostream>
#include <cstdio>
using namespace std;int main(){int n;double qi=1,pi=1,sum=0; //由数据倒推 q0=p0=1cin>>n;for(int i=1;i<=n;i++){qi = qi+pi;     //不使用中间变量的递推方法pi = qi-pi;sum += qi/pi;}printf("%.4lf",sum);return 0;
}

33:计算分数加减表达式的值

原题链接

总时间限制: 1000ms 内存限制: 65536kB

描述

编写程序,输入n的值,求 1/1 - 1/2 + 1/3 - 1/4 + 1/5 - 1/6 + 1/7 - 1/8 + … + (-1)n-1·1/n 的值。

输入

输入一个正整数n。1 <= n <= 1000。

输出

输出一个实数,为表达式的值,保留到小数点后四位。

样例输入

2

样例输出

0.5000

参考程序

#include <iostream>
#include <cstdio>
using namespace std;int main(){int n;double sum=0;cin>>n;for(int i=1;i<=n;i++){if(i%2==1)sum += (double)1/i;     // 1/i需要进行强制类型转换elsesum = sum-(double)1/i;}printf("%.4lf",sum);return 0;
}

34:求阶乘的和

原题链接

总时间限制: 1000ms 内存限制: 65536kB

描述

给定正整数n,求不大于n的正整数的阶乘的和(即求1!+2!+3!+…+n!)

输入

输入有一行,包含一个正整数n(1 < n < 12)。

输出

输出有一行:阶乘的和。

样例输入

5

样例输出

153

参考程序

#include <iostream>
#include <cstdio>
using namespace std;int main(){int n;long temp=1,sum=0;cin>>n;for(int i=1;i<=n;i++){temp *= i;sum += temp;}cout<<sum;return 0;
}

35:求出e的值

原题链接

总时间限制: 1000ms 内存限制: 65536kB

描述

利用公式e = 1 + 1/1! + 1/2! + 1/3! + … + 1/n! 求e 。

输入

输入只有一行,该行包含一个整数n(2<=n<=15),表示计算e时累加到1/n!。

输出

输出只有一行,该行包含计算出来的e的值,要求打印小数点后10位。

样例输入

10

样例输出

2.7182818011

提示

1、e以及n!用double表示

2、要输出浮点数、双精度数小数点后10位数字,可以用下面这种形式:

printf("%.10f", num);

参考程序

#include <iostream>
#include <cstdio>
using namespace std;int main(){double n,e=1,temp=1;cin>>n;for(int i=1;i<=n;i++){temp *= i;e += 1/temp;}printf("%.10lf",e);return 0;
}

36:计算多项式的值

原题链接

总时间限制: 1000ms 内存限制: 65536kB

描述

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

输入

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

输出

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

样例输入

2.0 4

样例输出

31.00

参考程序

#include <iostream>
#include <cstdio>
using namespace std;int main(){int n;float x;float sum=1,temp=1;  //temp为中间值cin>>x>>n;for(int i=1;i<=n;i++){temp *= x;sum += temp;}printf("%.2f",sum);return 0;
}

37:雇佣兵

原题链接

总时间限制: 1000ms 内存限制: 65536kB

描述

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

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

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

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

输入

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

输出

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

样例输入

5 2 10

样例输出

6

参考程序

#include <iostream>
#include <cstdio>
using namespace std;int main(){int M,N,X,m=0;  //m为当前体力值cin>>M>>N>>X;for(int i=1;i<=X;i++){  //将能力元素作为外层循环m += N;             //每个能量元素加战斗力数值的体力if(m>=M){           //当当前战斗力满足条件N += M/N;       //提升战斗力m = 0;          //战斗结束,体力清零}}cout<<N;return 0;}

38:计算多项式的导函数

原题链接

总时间限制: 1000ms 内存限制: 65536kB

描述

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

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

(2)、(Cx^n)’ = Cn*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(xm)+Cm-1(x(m-1))+…+C0(Cm!=0)那么输出Cm…C0
(3) 相邻整数之间有单个空格。

样例输入

3
0
10
2
3 2 1
3
10 0 1 2

样例输出

0
6 2
30 0 1

参考程序

#include <iostream>
using namespace std;int main(){int n,c;cin>>n;if(n==0)    //当n=0,直接输出0cout<<0;elsefor(int i=n;i>0;i--){cin>>c;cout<<c*i<<" ";}return 0;
}

39:与7无关的数

原题链接

总时间限制: 1000ms 内存限制: 65536kB

描述

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

输入

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

输出

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

样例输入

21

样例输出

2336

参考程序

#include <iostream>
using namespace std;int main()
{int n,temp; //temp为中间变量long sum=0;bool is_7;cin>>n;for(int i=1; i<=n; i++){is_7 = false;temp = i;while(temp>0){if(temp%10==7)is_7 = true;temp /= 10;}if(is_7==false && i%7!=0)sum += i*i;}cout<<sum;return 0;
}

40:数1的个数

原题链接

总时间限制: 1000ms 内存限制: 65536kB

描述

给定一个十进制正整数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”的个数。

样例输入

12

样例输出

5

参考程序

#include <iostream>
#include <cstdio>
using namespace std;int main(){int n,sum=0,temp;   //temp为中间变量cin>>n;for(int i=1;i<=n;i++){temp = i;while(temp){if(temp%10==1)sum++;temp /=10;}}cout<<sum;return 0;
}

41:数字统计

原题链接

总时间限制: 1000ms 内存限制: 65536kB

描述

请统计某个给定范围[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 22样例 #2:
2 100

样例输出

样例 #1:
6样例 #2:
20

参考程序

#include <iostream>
#include <cstdio>
using namespace std;int main(){int L,R,sum=0,temp;cin>>L>>R;for(int i=L;i<=R;i++){temp = i;while(temp){if(temp%10==2)sum++;temp /=10;}}cout<<sum;return 0;
}

42:画矩形

原题链接

总时间限制: 1000ms 内存限制: 65536kB

描述

根据参数,画出矩形。

输入

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

输出

输出画出的图形。

样例输入

7 7 @ 0

样例输出

@@@@@@@
@     @
@     @
@     @
@     @
@     @
@@@@@@@

参考程序

#include <iostream>
#include <cstdio>
using namespace std;int main(){int h,w,isSolid;char c;cin>>h>>w>>c>>isSolid;for(int i=1;i<=h;i++){if(i==1 || i==h || isSolid==1){for(int j=1;j<=w;j++)cout<<c;cout<<endl;}else{cout<<c;for(int j=1;j<=w-2;j++)cout<<" ";cout<<c<<endl;}}return 0;
}

43:质因数分解

原题链接

总时间限制: 1000ms 内存限制: 65536kB

描述

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

输入

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

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

输出

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

样例输入

21

样例输出

7

参考程序

#include <iostream>
#include <cstdio>
#include <cmath>
using namespace std;
int is_Prime(int);int main(){long n;cin>>n;for(int i=2;i<=sqrt(n);i++){    //从0枚举到qrt(n)if(is_Prime(i)){if(n%i==0 && is_Prime(n/i)){  //另一个因数也是素数cout<<n/i;break;}}}return 0;}int is_Prime(int a){    //判断是否是素数bool isPrime=true;for(int i=2;i<=sqrt(a);i++)if(a%i==0){isPrime = false;break;}return isPrime;
}

44:第n小的质数

原题链接

总时间限制: 1000ms 内存限制: 65536kB

描述

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

输入

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

输出

第n小的质数。

样例输入

10

样例输出

29

参考程序

#include <iostream>
#include <cstdio>
using namespace std;int main(){int n;bool isPrime;cin>>n;for(int i=2;;i++){      //递增查询每一个数isPrime = true;for(int j=2;j*j<=i;j++){    if(i%j==0)isPrime = false;}if(isPrime){    //判断是否为素数n--;}if(n==0){cout<<i;break;}}return 0;
}

45:金币

原题链接

总时间限制: 1000ms 内存限制: 65536kB

描述

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

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

输入

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

输出

骑士获得的金币数。

样例输入

6

样例输出

14

参考程序

#include <iostream>
using namespace std;int main(){int n,temp=1,temp_max=1,sum=0;  //temp_max为每天的金币数,temp为剩余连续天数cin>>n;for(int i=1;i<=n;i++){      //随天数递增sum += temp_max;if(--temp==0){      //剩余天数自减,并判断是否为零temp = ++temp_max;  //使用完剩余天数,每天金币数加一}}cout<<sum;return 0;
}

OpenJudge1.5编程基础之循环控制相关推荐

  1. 1.5 编程基础之循环控制(45题)

    1.5编程基础之循环控制 01 求平均年龄 1.5编程基础之循环控制 01 求平均年龄_青少年趣味编程-CSDN博客 1.5编程基础之循环控制 02 财务管理 1.5编程基础之循环控制 02 财务管理 ...

  2. 1.5 编程基础之循环控制 45 金币 方法二(python3实现)

    OpenJudge - 45:金币 信息学奥赛一本通(C++版)在线评测系统 ​​​​​​[NOIP2015 普及组] 金币 - 洛谷 1.5编程基础之循环控制_45金币 https://blog.c ...

  3. 1.5编程基础之循环控制 03 均值 python

    http://noi.openjudge.cn/ch0105/03/ """ 1.5编程基础之循环控制 03 均值 http://noi.openjudge.cn/ch0 ...

  4. 1.5 编程基础之循环控制 36 计算多项式的值 python

    http://noi.openjudge.cn/ch0105/36/ """ 1.5 编程基础之循环控制 36 计算多项式的值 http://noi.openjudge. ...

  5. 1.5 编程基础之循环控制 33 计算分数加减表达式的值 python

    http://noi.openjudge.cn/ch0105/33/ """1.5 编程基础之循环控制 33 计算分数加减表达式的值 http://noi.openjud ...

  6. 1.5编程基础之循环控制 32 求分数序列和 python

    http://noi.openjudge.cn/ch0105/32/ """ 1.5编程基础之循环控制 32 求分数序列和 http://noi.openjudge.cn ...

  7. 1.5编程基础之循环控制 26 统计满足条件的4位数个数 python

    http://noi.openjudge.cn/ch0105/26/ """1.5编程基础之循环控制 26 统计满足条件的4位数个数 http://noi.openjud ...

  8. 1.5 编程基础之循环控制 11 整数的个数(2022.01.09)--python

    http://noi.openjudge.cn/ch0105/11/ """ 1.5 编程基础之循环控制 11 整数的个数(2022.01.09) http://noi. ...

  9. 1.5 编程基础之循环控制 21 角谷猜想--方法二

    /* 1.5编程基础之循环控制 21 角谷猜想 http://noi.openjudge.cn/ch0105/21/ */ #include<bits/stdc++.h> using na ...

最新文章

  1. python调用c#注意事项_python 调用c# 超级直接示例
  2. 中通知设置响铃_iOS 13.1.3 正式版:解决来电不响铃问题
  3. 2015年度最全微课堂笔记精华包
  4. 计算机图形学与相关学科的关系,哈尔滨工业2015博士招生计算机图形学与人机交互设计大纲...
  5. css3图片垂直居中
  6. [html] 写一个布局,它的宽度是不固定的100%,如果让它的宽度始终是高度的一半呢?
  7. Apollo自动驾驶入门课程第⑨讲 — 控制(上)
  8. 传输层协议(3):TCP 连接(中)
  9. 借款人到期不还钱,出借人能不能既要逾期利息又要违约金?
  10. PSI 项目经理 PMP 计算题公式人话版解释
  11. 射影几何----圆锥曲线切线中割,切弦平行的证明
  12. 《程序员健康指南》阅读笔记
  13. CSS 自动换行样式
  14. MongoDB4.2.0安装包并配上安装教程
  15. 对当前医院奖金分配制度的探讨
  16. Python SQL 语法简单入门
  17. 智慧风电:数字孪生 3D 风机智能设备运维
  18. 化工单元操作试题(含答案)
  19. java如何把汉字转换成拼音
  20. Mysql之mysqldump工具

热门文章

  1. LSD 直线段检测算法
  2. 案例分享:Qt中英文输入软键盘(支持Qt4、Qt5、触摸和键鼠混合输入等)
  3. 脉冲压缩增益分析及匹配滤波归一化系数
  4. 计算机四级知识点(转)
  5. 第三代身份证原来是这样的 安全最大化不是梦想!
  6. 局域网广域网初步认识
  7. C++的File类文件操作
  8. MFC学习(02) 矩形移动 (VC++6.0版本)
  9. oracle夸版本迁移,【kingsql分享】Oracle跨版本迁移之XTTS_V4版本的实施
  10. html图文直播,jquery+html文字轮播