北京大学程序设计与算法(一)第3周测验(2020春季)

012:奇偶数判断

  • 总时间限制:

    1000ms

  • 内存限制:

    65536kB

  • 描述

    给定一个整数,判断该数是奇数还是偶数。

  • 输入

    输入仅一行,一个大于零的正整数n。

  • 输出

    输出仅一行,如果n是奇数,输出odd;如果n是偶数,输出even。

  • 样例输入

    扫描二维码关注公众号,回复: 9841298 查看本文章

    5

  • 样例输出

    odd

#include<iostream>
#include<cstdio>
#include<cmath>
using namespace std;
int main()
{
	int n =0;
	scanf("%d",&n);
	if(n%2!=0)
	{
		printf("odd");
	 } 
	 else
	 {
	 	printf("even");
	 }
	return 0;
 } 

013:求一元二次方程的根

  • 总时间限制:

    1000ms

  • 内存限制:

    65536kB

  • 描述

    利用公式x1 = (-b + sqrt(bb-4ac))/(2a), x2 = (-b - sqrt(bb-4ac))/(2a)求一元二次方程ax2+ bx + c =0的根,其中a不等于0。

  • 输入

    输入一行,包含三个浮点数a, b, c(它们之间以一个空格分开),分别表示方程ax2 + bx + c =0的系数。

  • 输出

    输出一行,表示方程的解。 若b2 = 4 * a * c,则两个实根相等,则输出形式为:x1=x2=…。 若b2 > 4 * a * c,则两个实根不等,则输出形式为:x1=…;x2 = …,其中x1>x2。 若b2 < 4 * a * c,则有两个虚根,则输出:x1=实部+虚部i; x2=实部-虚部i,即x1的虚部系数大于等于x2的虚部系数,实部为0时不可省略。实部 = -b / (2a), 虚部 = sqrt(4ac-bb) / (2*a) 所有实数部分要求精确到小数点后5位,数字、符号之间没有空格。

  • 样例输入

    样例输入1 1.0 2.0 8.0 样例输入2 1 0 1

  • 样例输出

    样例输出1 x1=-1.00000+2.64575i;x2=-1.00000-2.64575i 样例输出2 x1=0.00000+1.00000i;x2=0.00000-1.00000i

#include<iostream>
#include<cstdio>
#include<cmath>
using namespace std;
int main()
{
	double a,b,c;
	scanf("%lf %lf %lf",&a,&b,&c);
	double x1 = (-b + sqrt(b*b-4*a*c))/(2*a);
	double x2  = (-b - sqrt(b*b-4*a*c))/(2*a);
	if(b*b==4*a*c)
		printf("x1=x2=%.5lf",x1);
	else if(b*b>4*a*c)
		{
			if(x1 > x2)
				printf("x1=%.5lf;x2=%.5lf",x1,x2);
			else
				printf("x1=%.5lf;x2=%.5lf",x2,x1);
		}
		else
		{
			double a1 = -b / (2*a);
			double a2 = sqrt(4*a*c-b*b) / (2*a);
			if(b == 0)
			{
				a1 = 0;
			}
			printf("x1=%.5lf+%.5lfi;x2=%.5lf-%.5lfi",a1,a2,a1,a2);
		}
	return 0;
 } 

014:点和正方形的关系

  • 总时间限制:

    1000ms

  • 内存限制:

    65536kB

  • 描述

    有一个正方形,四个角的坐标(x,y)分别是(1,-1),(1,1),(-1,-1),(-1,1),x是横轴,y是纵轴。写一个程序,判断一个给定的点是否在这个正方形内(包括正方形边界)。

  • 输入

    输入一行,包括两个整数x、y,以一个空格分开,表示坐标(x,y)。

  • 输出

    输出一行,如果点在正方形内,则输出yes,否则输出no。

  • 样例输入

    1 1

  • 样例输出

    yes

#include<iostream>
#include<cstdio>
#include<cmath>
using namespace std;
int main()
{
	int a=0,b=0;
	scanf("%d %d",&a,&b);
	if(a>=-1&&a<=1&&b>=-1&&b<=1)
	{
		printf("yes");
	 } 
	 else
	 {
	 	printf("no");
	 }
	 return 0;
 } 

015:苹果和虫子2

  • 总时间限制:

    1000ms

  • 内存限制:

    65536kB

  • 描述

    你买了一箱n个苹果,很不幸的是买完时箱子里混进了一条虫子。虫子每x小时能吃掉一个苹果,假设虫子在吃完一个苹果之前不会吃另一个,那么经过y小时你还有多少个完整的苹果?

  • 输入

    输入仅一行,包括n,x和y(均为整数)。

  • 输出

    输出也仅一行,剩下的苹果个数

  • 样例输入

    10 4 9

  • 样例输出

    7

#include<iostream>
#include<cstdio>
#include<cmath>
using namespace std;
int main()
{
	int n= 0,x=0,y=0;
	scanf("%d %d %d",&n,&x,&y);
	int m = (y/x);
	
	if(y%x!=0)
	{
		m = m + 1;
	}
	int result = n - m ;

	if(n - m < 0)
	{
		result = 0;
	}
	printf("%d",result);
	 return 0;
 } 

016:简单计算器

  • 总时间限制:

    1000ms

  • 内存限制:

    65536kB

  • 描述

    一个最简单的计算器,支持+, -, *, / 四种运算。仅需考虑输入输出为整数的情况,数据和运算结果不会超过int表示的范围。

  • 输入

    输入只有一行,共有三个参数,其中第1、2个参数为整数,第3个参数为操作符(+,-,*,/)。

  • 输出

    输出只有一行,一个整数,为运算结果。然而: 1. 如果出现除数为0的情况,则输出:Divided by zero! 2. 如果出现无效的操作符(即不为 +, -, *, / 之一),则输出:Invalid operator!

  • 样例输入

    1 2 +

  • 样例输出

    3

#include<iostream>
#include<cstdio>
#include<cmath>
using namespace std;
int main()
{
	int a=0,b=0;
	char c = 0;

	scanf("%d %d %c",&a,&b,&c);

	if(c != '+' && c != '-' && c != '*' && c != '/')
	{
		printf("Invalid operator!");
	}
	else if(b == 0)
	{
		printf("Divided by zero!");
	}
	else
	{
		if(c == '+')
		{
			printf("%d",a+b);
		}
		else if(c == '-')
		{
			printf("%d",a-b);
		}
		else if(c == '*')
		{
			printf("%d",a*b);
		}
		else
		{
			printf("%d",a/b); 
		}
	}
	 return 0;
 } 

017:求整数的和与均值

  • 总时间限制:

    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>
#include<cmath>
using namespace std;
int main()
{
	int n = 0;
	int summ = 0;
	scanf("%d",&n);
	double ave = 0;
	for(int i = 0;i<n;i++)
	{
		int tmp = 0;
		scanf("%d",&tmp);
		summ += tmp;
	}
	ave = double(summ)/ double(n);
	printf("%d %.5lf",summ,ave);
	 return 0;
 } 

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

  • 总时间限制:

    1000ms

  • 内存限制:

    65536kB

  • 描述

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

  • 输入

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

  • 输出

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

  • 样例输入

    6 3 0 8 7 5 9

  • 样例输出

    9

#include<iostream>
#include<cstdio>
#include<cmath>
using namespace std;
int main()
{
	int n = 0;
	int minn = 1001;
	int maxx = -1;
	scanf("%d",&n);
	for(int i = 0;i<n;i++)
	{
		int tmp; 
		scanf("%d",&tmp);
		if(maxx<tmp)
		{
			maxx = tmp;
		}
		if (minn>tmp)
		{
			minn = tmp;
		}
	}
	printf("%d",maxx-minn);

	return 0;
 } 

019:奥运奖牌计数

  • 总时间限制:

    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>
#include<cmath>
using namespace std;
int main()
{
	int n = 0;
	int gold=0,silver=0,bronze = 0;
	
	scanf("%d",&n);
	for(int i = 0;i<n;i++)
	{
		int g1 = 0,s1= 0,b1 = 0;
		scanf("%d %d %d",&g1,&s1,&b1);
		gold += g1;
		silver += s1;
		bronze += b1;
		
	
	}
	printf("%d %d %d %d",gold,silver,bronze,gold + silver + bronze);

	return 0;
 } 

020:乘方计算

  • 总时间限制:

    1000ms

  • 内存限制:

    65536kB

  • 描述

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

  • 输入

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

  • 输出

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

  • 样例输入

    2 3

  • 样例输出

    8

#include<iostream>
#include<cstdio>
#include<cmath>
using namespace std;
int main()
{
	int a = 0,n = 0;
	scanf("%d %d",&a,&n);
	int i = 1;
	int m = a;
	while(i != n)
	{
		a = a*m;
		i++;
	}
	printf("%d",a);
	return 0;
 } 

021:鸡尾酒疗法

  • 总时间限制:

    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>
#include<cmath>
using namespace std;
int main()
{
	int n = 0;
	scanf("%d",&n);
	int total = 0;
	int success = 0;
	scanf("%d %d",&total,&success);
	double start = double(success)/double(total);
	for(int i =0;i<n-1;i++)
	{
		int t1,s1;
		scanf("%d %d",&t1,&s1);
		double ans = double(s1)/double(t1);
		if(ans - start>0.05)
		{
			printf("better\n");
		}
		else if(start-ans>0.05)
		{
			printf("worse\n");
		}
		else
		{
			printf("same\n");
		}
	}
	return 0;
 } 
发布了21 篇原创文章 · 获赞 0 · 访问量 476

猜你喜欢

转载自blog.csdn.net/qq_39901722/article/details/104865432
今日推荐