复数

[CSP-S模拟测试]:小P的生成树(数学+Kruskal)

那年仲夏 提交于 2019-12-01 09:32:11
题目描述   小$P$是个勤于思考的好孩子,自从学习了最大生成树后,他就一直在想:能否将边权范围从实数推广到复数呢?可是马上小$P$就发现了问题,复数之间的大小关系并没有定义。于是对于任意两个复数$z_1,z_2$,小$P$定义$z_1<z_2$当且仅当$|z_1|<|z_2|$。   现在,给出一张$n$个点$m$条边的简单无向带权图,小$P$想问你,如果按照他对复数大小的定义,这个图的最大生成树是什么? 输入格式   输入的第一行为两个正整数$n$和$m$,分别表示这个无向图的点数和边数。   接下来$m$行,每行四个整数$u,v,a,b(1\leqslant u,v\leqslant n,-1000\leqslant a,b\leqslant 1000)$,表示点$u$与点$v$之间有一条无向边,边权为$a+bi$。 输出格式   输出仅有一个实数,它等于所有的最大生成树中所有边权之和的模长。   实数四舍五入,保留六位小数。 样例 样例输入1: 3 3 1 2 1 3 2 3 2 2 3 1 3 1 样例输出1: 5.830952 样例输入2: 6 9 1 2 4 -1 2 3 4 1 3 4 -1 -5 1 5 -4 0 4 6 1 -6 2 6 -6 0 5 6 -7 5 2 4 7 1 1 4 -9 -5 样例输出2: 27.459060 数据范围与提示 样例$1

【PAT B1051】复数乘法 (15 分)

大城市里の小女人 提交于 2019-12-01 06:03:11
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 的形式。 输入样例: 2.3 3.5 5.2 0.4 输出样例: -8.68-8.23i =============================== 极坐标下的式子根本用不到。cmath库里有三角函数可以使用,用那个直接算就好。 唯一 坑点: 不要输出 -0.00。 因为题目只需保留2位小数,如:a = 0.001时是0.00,没错。 但 a = - 0.001时,是 -0.00吗?错了,把负号去掉才对,因为0不需要加负号。 a,b同理,即当 |a|,|b| < 0.01时,直接把a,b置为0.00,这样就避免了输出 -0.00。 另外还学到了新知识:

PAT_B_1051 复数乘法 (15 分)【后两个测试点】

纵然是瞬间 提交于 2019-12-01 06:02:57
复数可以写成 (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 的形式。 输入样例: 2.3 3.5 5.2 0.4 输出样例: -8.68-8.23i #include <iostream> #include <math.h> #include <iomanip> using namespace std; int main() { double R1,P1,R2,P2; cin>>R1>>P1>>R2>>P2; double cosp=cos(P1+P2); double sinp=sin(P1+P2); double A=R1*R2*cosp; double B=R1*R2*sinp; if(abs(A)<0.005&&abs(B)<0.005) cout

[PAT-乙级]1051.复数乘法

泄露秘密 提交于 2019-12-01 06:02:46
1051. 复数乘法 (15) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CHEN, Yue 复数可以写成(A + B i )的常规形式,其中A是实部,B是虚部, i 是虚数单位,满足 i 2 = -1;也可以写成极坐标下的指数形式(R*e (P i ) ),其中R是复数模,P是辐角, i 是虚数单位,其等价于三角形式 R(cos(P) + i sin(P))。 现给定两个复数的R和P,要求输出两数乘积的常规形式。 输入格式: 输入在一行中依次给出两个复数的R1, P1, R2, P2,数字间以空格分隔。 输出格式: 在一行中按照“A+Bi”的格式输出两数乘积的常规形式,实部和虚部均保留2位小数。注意:如果B是负数,则应该写成“A-|B|i”的形式。 输入样例: 2.3 3.5 5.2 0.4 输出样例: -8.68-8.23i r1(cos(p1) + isin(p1)) * r2(cos(p2)+isin(p2)展开就好了。关键在于0的判断,因为是小数, 小数与某个整数大小比较是否相等,应该是判断abs(x) <= 0.000001, 但在这里与0判断的话,要求我们保留2位小数,我们认为abs(x)<=0.001就可以。涉及了计算机组成原理的东西,头疼。 注意:一开始我用float类型case3没过

(乙)1051 复数乘法 (15 分)

瘦欲@ 提交于 2019-12-01 06:02:34
题目: 复数可以写成 (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 的形式。 输入样例: 2.3 3.5 5.2 0.4 输出样例: -8.68-8.23i 思路: 想做出来这道题,首先要知道复数乘法的运算法则。 两个复数:z1=a1+b1*i ,z2=a2+b2*i; 乘积:z1*z2=a1*a2 + a1*b2*i + a2*b1*i + b1*b2*i*i; 因为i*i,所以结果是: z1*z2=a1*a2 - b1*b2 + (a1*b2 + a2*b1)*i ; 其次,看懂题意:A+Bi=(R(cos(P) + i*sin(P)),即,A+Bi=R*cos(P)+ R*sin(P)*i; A=R*cos(P),B=R*sin(P); 那么 z1

PAT 1051 复数乘法

倾然丶 夕夏残阳落幕 提交于 2019-12-01 06:02:19
题目链接: 请点击 思路: 1 先在在极坐标下进行乘法,就是辐角相加复数模长相乘,得到新的极坐标形式的复数; 2 将极坐标形式的复数转为常规格式,这个题目已给出R(cos§+sin§i); 3 注意四舍五入临界值。由于要求保留两位小数,因此倘若复数的实部real与虚部image在-0.005<=real/image<0之间,应当置其值为0.00。例如,real=-0.003,四舍五入后变为-0.00,这与实际表示方法是不一致的应当为0.00。 代码: #include<iostream> #include<stdio.h> #include<cmath> using namespace std; int main(){ //注意输出格式,边界值 double R1,R2,P1,P2; while(cin>>R1>>P1>>R2>>P2){ double r,p,real,image; r=R1*R2; p=P1+P2; real=r*cos(p); image=r*sin(p); if(real>=-0.005&&real<0){ real=0.00;//判断是否有舍入误差 } printf("%.2f",real); if(image>=-0.005&&image<0){ image=0.00; } if(image<0){//判断虚部是正是负 printf("-");

1051 复数乘法

对着背影说爱祢 提交于 2019-12-01 06:02:00
(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 的形式。 输入样例: 2.3 3.5 5.2 0.4 输出样例: -8.68-8.23i #include <cstdio> #include <cmath> #define min 0.01 int main(int argc, const char * argv[]) { double r1, r2, p1, p2; double a, b; scanf("%lf %lf %lf %lf", &r1, &p1, &r2, &p2); a = (r1 * r2) * cos(p1 + p2); b = (r1 * r2) * sin(p1 + p2); if (fabs(a) <

1051. 复数乘法 (15)

微笑、不失礼 提交于 2019-12-01 06:01:41
复数可以写成(A + Bi)的常规形式,其中A是实部,B是虚部,i是虚数单位,满足i2 = -1;也可以写成极坐标下的指数形式(R*e(Pi)),其中R是复数模,P是辐角,i是虚数单位,其等价于三角形式(R(cos(P) + isin(P))。 现给定两个复数的R和P,要求输出两数乘积的常规形式。 输入格式: 输入在一行中依次给出两个复数的R1, P1, R2, P2,数字间以空格分隔。 输出格式: 在一行中按照“A+Bi”的格式输出两数乘积的常规形式,实部和虚部均保留2位小数。注意:如果B是负数,则应该写成“A-|B|i”的形式。 输入样例: 2.3 3.5 5.2 0.4 输出样例: -8.68-8.23i IDEA 1.用到三角函数sin(),cos(); 2.if(-0.005<a&&a<0) cout<<"0.00"; //没有负号,不应该是-0.00,注意控制; 3.用double类型,不要用float,不准确,不会ac; 4.尽量不要写中间变量,直接带入最终式,这样减少误差; 5. 复数表示形式转换:a=rcos(p), b=rsin(p) 。 CODE #include<iostream> #include<cmath> #include<iomanip> using namespace std; int main(){ double r1,p1,r2,p2;

1051 复数乘法(15 分)

点点圈 提交于 2019-12-01 06:01:31
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 的形式。 输入样例: 2.3 3.5 5.2 0.4 输出样例: -8.68-8.23i 解析: 这道题我也总是部分答案错误,但在查阅其他大神的解题思路得知,必须考虑-0.0034四舍五入为+0.00,而实际情况为: 所以,我们要对x>-0.005且x<0的数进行判断。 代码如下: #include<cstdio> #include<cmath> #include<iostream> using namespace std; int main(){ double a,b,c,d; scanf("%lf%lf%lf%lf",&a,&b,&c,&d); double R

1051 复数乘法 python

六眼飞鱼酱① 提交于 2019-12-01 05:58:57
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 的形式。 输入样例: 2.3 3.5 5.2 0.4 输出样例: -8.68-8.23i import math ls=list(map(eval,input().split())) a1=ls[0]*math.cos(ls[1]) b1=ls[0]*math.sin(ls[1]) a2=ls[2]*math.cos(ls[3]) b2=ls[2]*math.sin(ls[3]) A=a1*a2-b1*b2 #乘积的实部 B=a1*b2+a2*b1 #乘积的虚部 if A >=-0.005 and A<0: print('0.00',end='') else: