PAT 乙级------ 1051 ~ 1054 附思路及代码复数乘法、卖个萌、住房空置率、求平均值

今天也要开心啊!!!PEACE & LOVE

1051 复数乘法
思路: 这其实是一个数学问题;首先明确复数乘法的规则,之后就是极坐标转换,和一点三角函数的知识。
在这里插入图片描述

#include <stdio.h>
#include <math.h>
 
int main() {
    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) < 0.01){
        a = 0;
    }
    if(fabs(b) < 0.01){
        b = 0;
    }
    if(b < 0){
        printf("%.2lf-%.2lfi", a, fabs(b));
    }
    else{
        printf("%.2lf+%.2lfi", a, b);
    }
    return 0;
}

在这里插入图片描述
1052 卖个萌
思路: 存储符号用正则表达式匹配,注意构成表情的符号可能有多个,所以定义三维数组;之后按给定顺序输出。

#include<stdio.h>

int main() {
	int n, ch, arr[5];
	char marks[3][10][5]= {0};
	for(int i=0; i<3; i++) {
		for(int j=0; (ch=getchar())!='\n';) {
			if(ch == '[')
				scanf("%[^]]", &marks[i][j++]);
		}
	}
	scanf("%d", &n);
	for(int i=0; i<n; i++) {
		for(int j=0; j<5; j++)
			scanf("%d", &arr[j]);
		if(arr[0]>0 && arr[0]<=10 && *marks[0][--arr[0]]
		        && arr[1]>0 && arr[1]<=10 && *marks[1][--arr[1]]
		        && arr[2]>0 && arr[2]<=10 && *marks[2][--arr[2]]
		        && arr[3]>0 && arr[3]<=10 && *marks[1][--arr[3]]
		        && arr[4]>0 && arr[4]<=10 && *marks[0][--arr[4]]
		  )
			printf("%s(%s%s%s)%s\n", marks[0][arr[0]], marks[1][arr[1]], marks[2][arr[2]],
			       marks[1][arr[3]], marks[0][arr[4]]);
		else
			printf("Are you kidding me? @\\/@\n");
	}
	return 0;
}

在这里插入图片描述
1053 住房空置率
思路: 一个统计题…

#include<stdio.h>

int main() {
	int n, d, day, cnt, empty, _empty;//观察户数,阈值,观察天数,空置数,可能空置数
	double e, _e;//电压阈值,每日用电数
	cnt = empty = _empty = 0;
	scanf("%d%lf%d", &n, &e, &d);
	for(int i=0; i<n; i++) {
		scanf("%d",&day);
		for(int j=0; j<day; j++) {
			scanf("%lf",&_e);
			cnt = _e < e ? cnt+1 : cnt;
		}
		if(cnt > day/2) {
			int flag = 0;
			flag = day > d ? 1 : 0;//满足条件1且观察天数超过观察期阈值
			if(flag)
				empty++;
			else
				_empty++;
		}
		cnt = 0;
	}
	printf("%.1lf%% %.1lf%%", 1.0*_empty/n*100, 1.0*empty/n*100);
	return 0;
}

在这里插入图片描述
1054 求平均值
思路: 用sscanf(), sprintf()指定格式输入输出;

#include<stdio.h>
#include<string.h>
#define LEN 100
int main() {
	int n, flag, cnt = 0;
	double tmp, sum = 0;
	char s[LEN], _s[LEN];
	scanf("%d", &n);
	for(int i=0; i<n; i++) {
		scanf("%s",&s);
		sscanf(s,"%lf",&tmp);
		sprintf(_s,"%.2f",tmp);
		flag = 0;
		for(int j=0; j<strlen(s); j++)
			if(s[j] != _s[j])
				flag = 1;
		if(flag || tmp>1000 || tmp< -1000) {
			printf("ERROR: %s is not a legal number\n", s);
			continue;
		} else {
			sum += tmp;
			cnt++;
		}
	}
	if(cnt == 1)
		printf("The average of 1 number is %.2f",sum);
	else if(cnt == 0)
		printf("The average of 0 numbers is Undefined");
	else
		printf("The average of %d numbers is %.2f", cnt, sum/cnt);
    return 0;
}

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值