当前位置: 代码迷 >> 综合 >> PAT乙级 1046 划拳 (15分) 1051 复数乘法 (15分)
  详细解决方案

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

热度:23   发布时间:2023-12-17 14:17:52.0

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);elseprintf("%.2f%+.2fi\n", tmp1, tmp2);return 0;
}