「PAT乙级真题解析」Basic Level 1063 计算谱半径 (问题分析+完整步骤+伪代码描述+提交通过代码)
题目给定了"谱半径"的定义, 然后要求谱半径, 所以按照定义翻译成程序语言即可。 由于谱半径是一组值中的最大值, 所以这题主要分为求出一组值以及求这组值的最大值。
#算法#数据结构#需求分析#c语言#pat考试
Table of Contents
乙级的题目训练主要用来熟悉编程语言的语法和形成良好的编码习惯和编码规范。从小白开始逐步掌握用编程解决问题。
PAT乙级BasicLevelPractice 1063 计算谱半径
问题分析
题目给定了"谱半径"的定义, 然后要求谱半径, 所以按照定义翻译成程序语言即可。 由于谱半径是一组值中的最大值, 所以这题主要分为求出一组值以及求这组值的最大值。
完整描述步骤
- 获取输入: 复数空间特征值的个数(需要计算的值的个数), 各个特征值的实部与虚部
- 初始化最大模记录器
- 对于每一个特征值的实部与虚部:
- 计算模 = 实部与虚部的平方和的开方
- 检查当前模是否大于当前最大模
- 如果大于当前最大模, 则更新最大模为当前模的值
- 输出最大模
伪代码描述
- get input: case_amount
- init max radius recorder: spectral_radius = -1
- for (int i = 0; i < case_amount; i++):
- get input: real_value, imaginary_value
- calculate radius: radius = sqrt(real * real + imaginary * imaginary);
- if radius > spectral_radius:
- spectral_radius = radius
- print(spectral_radius);
完整提交代码
/*
# 问题分析
题目给定了"谱半径"的定义, 然后要求谱半径, 所以按照定义翻译成程序语言即可。
由于谱半径是一组值中的最大值, 所以这题主要分为求出一组值以及求这组值的最大值。
# 完整描述步骤
1. 获取输入: 复数空间特征值的个数(需要计算的值的个数), 各个特征值的实部与虚部
2. 初始化最大模记录器
3. 对于每一个特征值的实部与虚部:
- 计算模 = 实部与虚部的平方和的开方
- 检查当前模是否大于当前最大模
- 如果大于当前最大模, 则更新最大模为当前模的值
4. 输出最大模
# 伪代码描述
1. get input: case_amount
2. init max radius recorder: spectral_radius = -1
3. for (int i = 0; i < case_amount; i++):
- get input: real_value, imaginary_value
- calculate radius: radius = sqrt(real * real + imaginary * imaginary);
- if radius > spectral_radius:
- spectral_radius = radius
4. print(spectral_radius);
*/
# include<stdio.h>
# include<math.h>
int main(){
double spectral_radius = -1;
int case_amount;
scanf("%d", &case_amount);
int real, imaginary;
for (int i = 0; i < case_amount; i++){
scanf("%d %d", &real, &imaginary);
double radius = sqrt(real * real + imaginary * imaginary);
if (radius > spectral_radius){
spectral_radius = radius;
}
}
spectral_radius = (int)(spectral_radius * 100 + 0.5) / 100.0;
printf("%.2f", spectral_radius);
return 0;
}