PAT乙级 1046 划拳 (15分) & 1051 复数乘法 (15分)

1046 划拳 (15分)

划拳是古老中国酒文化的一个有趣的组成部分。酒桌上两人划拳的方法为:每人口中喊出一个数字,同时用手比划出一个数字。如果谁比划出的数字正好等于两人喊出的数字之和,谁就赢了,输家罚一杯酒。两人同赢或两人同输则继续下一轮,直到唯一的赢家出现。

下面给出甲、乙两人的划拳记录,请你统计他们最后分别喝了多少杯酒。

输入格式:

输入第一行先给出一个正整数 N(≤100),随后 N 行,每行给出一轮划拳的记录,格式为:

甲喊 甲划 乙喊 乙划

其中是喊出的数字,是划出的数字,均为不超过 100 的正整数(两只手一起划)。

#include<iostream>
using namespace std;

int main()
{
	int all = 0, a = 0, aa = 0, b = 0, bb = 0;
	int aaa = 0, bbb = 0;
	cin >> all;
	for (int i = 0; i < all; i++)
	{
		cin >> a >> aa >> b >> bb;
		if (a + b == aa && a + b != bb)
			bbb++;
		if (a + b != aa && a + b == bb)
			aaa++;
	}
	cout << aaa << " " << bbb;
	return 0;
}

1051 复数乘法 (15分)

复数可以写成 (A+Bi) 的常规形式,其中 A 是实部,B 是虚部,i 是虚数单位,满足 i​2​​=−1;也可以写成极坐标下的指数形式 (R×e​(Pi)​​),其中 R 是复数模,P 是辐角,i 是虚数单位,其等价于三角形式 R(cos(P)+isin(P))。

现给定两个复数的 R 和 P,要求输出两数乘积的常规形式。

输入格式:

输入在一行中依次给出两个复数的 R​1​​, P​1​​, R​2​​, P​2​​,数字间以空格分隔。

输出格式:

在一行中按照 A+Bi 的格式输出两数乘积的常规形式,实部和虚部均保留 2 位小数。注意:如果 B 是负数,则应该写成 A-|B|i 的形式。

这个题照抄的这位同学的

https://www.cnblogs.com/moujun1001/p/9615461.html

C++中保留后面N位小数点比较麻烦,所以可以直接用printf,math函数中有sin,cos函数可以直接用

fabs——浮点数绝对值

abs——整数的绝对值

#include <cstdio>
#include <cmath>

int main() {
    double a = 0, b = 0, c = 0, d = 0;
    bool flag1 = false, flag2 = false;
    scanf("%lf %lf %lf %lf", &a, &b, &c, &d);
    double tmp1 = 0, tmp2 = 0;
    tmp1 = a * c * cos(b + d);
    tmp2 = a * c * sin(b + d);
    if (fabs(tmp1) < 0.01) flag1 = true;
    if (fabs(tmp2) < 0.01) flag2 = true;
    if (flag1 && flag2)
        printf("0\n");
    else if (flag1 && !flag2)
        printf("0.00%+.2fi\n", tmp2);
    else if (!flag1 && flag2)
        printf("%.2f+0.00i\n", tmp1);
    else
        printf("%.2f%+.2fi\n", tmp1, tmp2);

    return 0;
}

猜你喜欢

转载自blog.csdn.net/qq_38386991/article/details/104537627