天天看點

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;
}
           

繼續閱讀