[大学计算] 第二次小测 答案

计算医疗报销费用

完成程序,只在Program和End之间增加代码。
编写函数double MedicalReimbursement(
double totalFee, double outerFee, double startLine,
double rbRatio, double capLine),计算患者可报销的医疗费用,其中:
1)totalFee表示治疗总费用,
2)outerFee表示报销范围外的费用,
3)startLine表示起付线,
4)rbRatio表示报销比例,
5)capLine表示封顶线。
医疗可报销费用可用下面公式计算:
可报销费用 = (治疗总费用 - 报销范围外的费用 - 起付线)×报销比例
1)若治疗总费用 - 报销范围外的费用低于起付线,则可报销费用为0;
2)若按上述公式计算出的可报销费用大于封顶线,则可报销费用为封顶线金额。
例如:
案例1:假设小李的治疗费用是20000元,其中报销范围外的费用是5000元,起付线标准是1000元,报销比例是50% ,封顶线是100000。则小李可报销的金额 = (20000 - 5000 - 1000) * 50 %= 7000元,报销费用在封顶线内,因此小李可实际报销7000元。
案例2:假设小李的治疗费用是20万元,其中报销范围外的费用是2万元,起付线标准是1000元,报销比例是70 % ,封顶线是10万元。则小李可报销的金额 = (200000 - 20000 - 1000) * 70 %= 125300元,报销费用超过封顶线,因此小李实际报销10万元。
输入格式:
输入在一行中给出治疗总费用、报销范围外的费用、起付线、报销比例、封顶线,中间用空格分开。
输出格式:
在一行中输出实际可报销的费用。
输入样例:
20000 5000 1000 0.5 100000
输出样例:
7000

#include <iostream>
#include <cmath>
using namespace std;

double MedicalReimbursement(
	double totalFee, double outerFee, double startLine,
	double rbRatio, double capLine)
{
	/**********Program**********/
	if (totalFee - outerFee < startLine)
	{
		return 0;
	}
	double res = (totalFee - outerFee - startLine) * rbRatio;
	if (res > capLine)
	{
		return capLine;
	}
	return res;



	/**********  End  **********/
}

int main()
{
	double totalFee, outerFee, startLine, rbRatio, capLine;
	cin >> totalFee >> outerFee >> startLine >> rbRatio >> capLine;
	cout << MedicalReimbursement(totalFee, outerFee, startLine, rbRatio, capLine);
	return 0;
}

计算a+b

完成程序,只在Program和End之间增加代码。
输入两个整数到变量a、b中,计算a+b的结果并输出。
例如:输入10 20,则输出30。
输入格式:
输入在一行中给出两个整数,中间用空格分开。
输出格式:
在一行中输出两个整数的和。
输入样例:
1 1
输出样例:
2

#include <iostream>
using namespace std;
int main()
{
	int a, b;
	/**********Program**********/
	cin >> a >> b;
	cout << a + b;


	/**********  End  **********/
	return 0;
}

求函数的值

完成程序,只在Program和End之间增加代码。
计算函数f(x)=a∗x3+b∗x2+c∗x+d的值,并将结果存入fx中。
输入格式:
输入在一行中给出5个浮点数,分别输入给a、b、c、d、x,中间用空格分开。
输出格式:
在一行中输出f(x)的值。
输入样例:
1 1 1 1 1
输出样例:
4

#include <iostream>
using namespace std;


int main()
{
    double a, b, c, d, x, fx;
    cin >> a >> b >> c >> d >> x;
    /********Program********/
    fx = a * x * x * x + b * x * x + c * x + d;

    /********  End  ********/
    cout << fx;
    return 0;
}

逆序输出正整数

完成程序,只在Program和End之间增加代码。
该程序将正整数n逆序输出。如输入123,则输出321,输入2300,则输出32。
输入格式:
输入在一行中给出1个1000到9999之间的正整数n。
输出格式:
在一行中输出n的逆序。
输入样例:
4321
输出样例:
1234

#include <iostream>
using namespace std;
int main()
{
	unsigned n;
	cin >> n;
	/**********Program**********/

	int a = n % 10;
	int b = n / 10 % 10;
	int c = n / 100 % 10;
	int d = n / 1000;
	cout << a * 1000 + b * 100 + c * 10 + d;






	/**********  End  **********/
	return 0;
}

计算课时费

完成程序,只在Program和End之间增加代码。
某健身俱乐部有两种课程,课程A和课程B,其中课程A为100元
一节课,B为150元一节课,有促销活动如下:
1.单课程满20节(含20),给与8折优惠。
2.同时选择两种课程,在优惠1的基础上再享受9折优惠。
3.计算折扣价格后,每满1000元,享受50元的返现。
以上促销活动可同时参加。
请完成函数cashcheck(),该函数的参数为客户希望学习的
A、B课程数,计算并返回该用户应支付的金额。
输入格式:
输入在一行中给出两个正整数,分别是客户学习课程A和课程B的课时数,中间用空格分开。
输出格式:
在一行中输出一个正整数表示客户要支付的金额。
输入样例:
20 20
输出样例:
3450

#include <iostream>
using namespace std;

int cashcheck(int ClassA, int ClassB);

/********Program********/
int cashcheck(int ClassA, int ClassB)
{
    double tot1 = ClassA * 100;
    double tot2 = ClassB * 150;
    if (ClassA >= 20)
    {
        tot1 *= 0.8;
    }
    if (ClassB >= 20)
    {
        tot2 *= 0.8;
    }
    double tot = (tot1 + tot2);
    if (ClassA != 0 && ClassB != 0)
    {
        tot *= 0.9;
    }
    tot -= int(tot / 1000) * 50;
    return tot;
}





/********  End  ********/

int main()
{
    int ClassA, ClassB;
	cin >> ClassA >> ClassB;
	cout << cashcheck(ClassA, ClassB);
    return 0;
}

完美数判断

完成程序,只在Program和End之间增加代码。
如果一个数等于其因数(不含自身)之和,则这个数就是完美数。
例如:6是完美数,因为6=1+2+3.
编写函数int IsPerfectNumber(int number);
判断正整数number是不是完美数,是则返回1,否则返回0.
输入格式:
输入在一行中给出一个正整数。
输出格式:
1或者0,正整数是完美数则输出1,否则输出0。
输入样例:
20
输出样例:
0

#include <iostream>
using namespace std;
int IsPerfectNumber(int number);
int main()
{
    int num;
    cin >> num;
    cout << IsPerfectNumber(num);
    return 0;
}

/* ********* Program begin ************* */

int IsPerfectNumber(int number)
{
    int cnt = 0;
    for (int i = 1; i <= number / 2; i ++)
    {
        if (number % i == 0)
        {
            cnt += i;
        }
    }
    return number == cnt;
}






/* ********* Program end ************* */

公式计算

完成程序,只在Program和End之间增加代码。
编写计算 1 - 1/3 + 1/5 - 1/7 + 1/9 … 前n项之和的函数cal(int n),其中n是表达式的项数,n为正整数。例如,当n为4时,表达式为1 - 1/3 + 1/5 - 1/7,值为0.72381。
输入格式:
输入在一行中给出1个正整数n。
输出格式:
输出表达式前n项的和,为一个浮点数。
输入样例:
4
输出样例:
0.72381

#include <iostream>
using namespace std;
double cal(int n)
{
    /**********Program**********/
    double sign = 1;
    double tot = 0;
    for (double i = 1; i <= n; i += 1)
    {
        tot += 1 / (i * 2 - 1) * sign;
        sign *= -1;
    }
    return tot;




    /**********  End  **********/
}
int main()
{
    int n;
    cin >> n;
    cout << cal(n);
    return 0;
}

四则运算

完成程序,只在Program和End之间增加代码。
输入两个浮点数到全局变量a、b中,输入运算符到c中。
编写函数f(),根据运算符c的类型对a、b进行运算,将结果存入全局变量x中。

c是’+’,则x = a + b
c是’-‘,则x = a - b
c是’*’,则x = a * b
c是’/‘,则x = a / b
c是’%’,则x = 0
c是其他符号,则x = -1 例如,a = 5.1, b = 5.2, c = ‘+’, 则x = 5.1 + 5.2 = 10.3
输入格式:
输入在一行中给出两个浮点数和一个运算符,中间用空格分开。
输出格式:
在一行中输出计算结果。
输入样例:
43.2 21 +
输出样例:
64.2

#include <iostream>
using namespace std;
void  f();
double  a, b, x;
char    c;
/**********Program**********/

void f()
{
    switch(c)
    {
        case '+':
        x = a + b;
        break;
        case '-':
        x = a - b;
        break;
        case '*':
        x = a * b;
        break;
        case '/':
        x = a / b;
        break;
        case '%':
        x = 0;
        break;
        default:
        x = -1;
        break;
    }
}







/**********  End  **********/
int main()
{
    cin >> a >> b >> c;
    f();
    cout << x;
    return 0;
}

有几个素数?

完成程序,只在Program和End之间增加代码。
对于给定的正整数m、n,编写函数cOfPrimes计算m——n(包括m、n)之间素数的个数并返回。
例如,m = 5,n = 2,函数的返回值为3,因为2——5之间的素数有2、3、5。
输入格式:
输入在一行中给出两个正整数,中间用空格分开。
输出格式:
在一行中输出两个正整数之间的素数个数。
输入样例:
4 21
输出样例:
6

#include <iostream>
using namespace std;

/**********Program**********/
int cOfPrimes(int m, int n)
{
    if (m > n)
    {
        int c = m;
        m = n;
        n = c;
    }
    if (m <= 1)
    {
        m = 2;
    }
    int tot = 0;
    for (int i = m; i <= n; i ++)
    {
        bool judge = 0;
        for (int j = 2; j <= i / 2; j ++)
        {
            if (i % j == 0)
            {
                judge = 1;
                break;
            }
        }
        if (judge == 0)
        {
            tot += 1;
        }
    }
    return tot;
}






/**********  End  **********/

int main()
{
    int m, n;
    cin >> m >> n;
    cout << cOfPrimes(m, n);
    return 0;
}

楼梯的走法

完成程序,只在Program和End之间增加代码。
张楚爬楼梯,已知他每次只能走一级或者两级台阶,要求实现
递归函数waysOfClimbing(int n),计算n级台阶的楼梯,张楚
一共有多少不同的走法数并返回。
例:假设楼梯一共有3级,他可以每次都走一级,即1 1 1,或
者第一次走一级,第二次走两级,即1 2,也可以第一次走两级
,第二次走一级,即2 1,一共3种方法。
完成程序,只在Program和End之间增加代码。
输入格式:
输入在一行中给出一个整数表示楼梯的台阶级数。
输出格式:
在一行中输出走法数。
输入样例:
3
输出样例:
3

#include <iostream>
using namespace std;

/**********Program**********/


int waysOfClimbing(int n)
{
    if (n == 1)
    {
        return 1;
    }
    if (n == 2)
    {
        return 2;
    }
    return waysOfClimbing(n - 1) + waysOfClimbing(n - 2);
}



/**********  End  **********/

int main()
{
    int n;
    cin >> n;
    int numOfWays = waysOfClimbing(n);
    cout << numOfWays;
    return 0;
}

posted @ 2024-05-16 01:42  RuntimeError-J  阅读(61)  评论(0)    收藏  举报