7-1 数据的间距问题 (20分) -- PTA
程序员文章站
2022-06-08 08:22:28
...
7-1 数据的间距问题 (20分)
复数类Complex有两个数据成员:a和b, 分别代表复数的实部和虚部,并有若干构造函数和一个重载-(减号,计算两个复数的距离)的成员函数。
要求设计一个函数模板
template < class T >
double dist(T a, T b)
对int,float,Complex或者其他类型的数据,返回两个数据的间距。
输入格式:
每一行为一个操作,每行的第一个数字为元素类型,1为整型元素,2为浮点型元素,3为Complex类型,若为整型元素,接着输入两个整型数据,若为浮点型元素,接着输入两个浮点型数据,若为Complex型元素,输入两个Complex型数据(a1 b1 a2 b2),输入0时标志输入结束。
输出格式:
对每个输入,每行输出一个间距值。
输入样例:
1 2 5
3 2 4 5 9
2 2.2 9.9
0
输出样例:
3
5.83095
7.7
注意:本博客代码未进行运算符重载(即未完全满足题目要求,但是满足pta所有测试点,也即答案完全正确),而是使用了更容易理解的函数调用;想要获取含有运算符重载的代码,请参考https://www.cnblogs.com/wzzdeblog/p/10828308.html
#include<iostream>
#include<cmath>
using namespace std;
class Complex{
private:
double a, b;
public:
Complex(){
a = 0;
b = 0;
}
Complex(double x, double y){
a = x;
b = y;
}
};
template < class T >
double dist(T a, T b)
{
return abs(a-b);
}
double s(double m1, double m2)
{
return pow(abs(m2-m1), 2);
}
int main()
{
int n;
while(cin >> n, n != 0){
if(n == 1){
int a, b;
cin >> a >> b;
cout << dist(a, b) << endl;
}
else if(n == 2){
float a, b;
cin >> a >> b;
cout << dist(a, b) << endl;
}
else if(n == 3){
double a, b;
double a1, b1, a2, b2;
cin >> a1 >> b1 >> a2 >> b2;
a = s(a1, a2);
b = s(b1, b2);
cout << sqrt(a+b) << endl;
}
}
return 0;
}
上一篇: Problem Set
下一篇: 1027 打印沙漏 (20分)