前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >杭电OJ2000-2009

杭电OJ2000-2009

作者头像
EmoryHuang
发布2022-09-23 11:17:46
3450
发布2022-09-23 11:17:46
举报
文章被收录于专栏:EmoryHuang's Blog

写在前面

本文记录了刷杭电 OJ2000-2009 的过程和一些想法,代码仅供参考!


2000 ASCII 码排序

Problem Description

输入三个字符后,按各字符的 ASCII 码从小到大的顺序输出这三个字符。

Input

输入数据有多组,每组占一行,有三个字符组成,之间无空格。

Output

对于每组输入数据,输出一行,字符中间用一个空格分开。

Sample Input

qwe asd zxc

Sample Output

e q w a d s c x z

解题思路

简单题,利用冒泡排序思想,直接比较交换

参考源码

代码语言:javascript
复制
#include <algorithm>
#include <iostream>
using namespace std;
int main() {
    char a, b, c;
    while (cin >> a >> b >> c) {
        if (a > b) swap(a, b);  //逆序则交换
        if (b > c) swap(b, c);
        if (a > b) swap(a, b);
        cout << a << " " << b << " " << c << endl;
    }
    return 0;
}

2001 计算两点间的距离

Problem Description

输入两点坐标(X1,Y1),(X2,Y2), 计算并输出两点间的距离。

Input

输入数据有多组,每组占一行,由 4 个实数组成,分别表示 x1,y1,x2,y2, 数据之间用空格隔开。

Output

对于每组输入数据,输出一行,结果保留两位小数。

Sample Input

0 0 0 1 0 1 1 0

Sample Output

1.00 1.41

解题思路

简单题,按照公式直接计算距离

参考源码

代码语言:javascript
复制
#include <cmath>
#include <iostream>
using namespace std;
int main() {
    double x1, y1, x2, y2, dis;
    while (cin >> x1 >> y1 >> x2 >> y2) {
        dis = sqrt((x1 - x2) * (x1 - x2) + (y1 - y2) * (y1 - y2));
        printf("%.2f\n", dis);
    }
    return 0;
}

2002 计算球体积

Problem Description

根据输入的半径值,计算球的体积。

Input

输入数据有多组,每组占一行,每行包括一个实数,表示球的半径。

Output

输出对应的球的体积,对于每组输入数据,输出一行,计算结果保留三位小数。

Sample Input

1 1.5

Sample Output

4.189 14.137

解题思路

简单题,按照球的体积公式直接计算

参考源码

代码语言:javascript
复制
#include <iostream>
#define PI 3.1415927
using namespace std;
int main() {
    double r;
    while (cin >> r) {
        printf("%.3f\n", 1.0 * 4 / 3 * PI * r * r * r);
    }
    return 0;
}

2003 求绝对值

Problem Description

求实数的绝对值。

Input

输入数据有多组,每组占一行,每行包含一个实数。

Output

对于每组输入数据,输出它的绝对值,要求每组数据输出一行,结果保留两位小数。

Sample Input

123 -234.00

Sample Output

123.00 234.00

解题思路

简单题,fabs()直接来就行

参考源码

代码语言:javascript
复制
#include <cmath>
#include <iostream>
using namespace std;
int main() {
    double n;
    while (cin >> n) {
        printf("%.2f\n", fabs(n));
    }
    return 0;
}

2004 成绩转换

Problem Description

输入一个百分制的成绩 t,将其转换成对应的等级,具体转换规则如下: 90-100 为 A; 80-89 为 B; 70-79 为 C; 60-69 为 D; 0-59 为 E;

Input

输入数据有多组,每组占一行,由一个整数组成。

Output

对于每组输入数据,输出一行。如果输入数据不在 0~100 范围内,请输出一行:“Score is error!”。

Sample Input

56 67 100 123

Sample Output

E D A Score is error!

解题思路

简单题,if-else 使用

参考源码

代码语言:javascript
复制
#include<iostream>
using namespace std;
int main(){
    int a;
    while(cin >> a){
        if(a > 100 || a < 0){
            cout << "Score is error!" << endl;
        }
        else if(a >= 90 && a <= 100){
            cout << "A" <<endl;
        }
        else if(a >= 80 && a <= 89){
            cout << "B" <<endl;
        }
        else if(a >= 70 && a <= 79){
            cout << "C" <<endl;
        }
        else if(a >= 60 && a <= 69){
            cout << "D" <<endl;
        }
        else{
            cout << "E" <<endl;
        }
    }
    return 0;
}

2005 第几天?

Problem Description

给定一个日期,输出这个日期是该年的第几天。

Input

输入数据有多组,每组占一行,数据格式为 YYYY/MM/DD 组成,具体参见 sample input , 另外,可以向你确保所有的输入数据是合法的。

Output

对于每组输入数据,输出一行,表示该日期是该年的第几天。

Sample Input

1985/1/20 2006/3/12

Sample Output

20 71

解题思路

根据输入月份 m 计算前 m-1 个月的总天数,再加上天数,2 月份则判断是否为闰年 普通闰年:公历年份是 4 的倍数,且不是 100 的倍数的 世纪闰年:公历年份是整百数的,必须是 400 的倍数才是闰年

参考源码

代码语言:javascript
复制
#include <iostream>
using namespace std;
int main() {
    int y, m, d;
    int ans, days[12] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
    char ch;  //读取 /
    while (cin >> y >> ch >> m >> ch >> d) {
        ans = 0;
        for (int i = 0; i < m - 1; i++) {
            ans += days[i];  //计算 m-1 个月的总天数
        }
        if ((y % 4 == 0 && y % 100 != 0) || y % 400 == 0)
            if (m > 2) ans++;     //闰年加一天
        cout << ans + d << endl;  //加上天数
    }
    return 0;
}

2006 求奇数的乘积

Problem Description

给你 n 个整数,求他们中所有奇数的乘积。

Input

输入数据包含多个测试实例,每个测试实例占一行,每行的第一个数为 n,表示本组数据一共有 n 个,接着是 n 个整数,你可以假设每组数据必定至少存在一个奇数。

Output

输出每组数中的所有奇数的乘积,对于测试实例,输出一行。

Sample Input

3 1 2 3 4 2 3 4 5

Sample Output

3 15

解题思路

简单题,判断输入是否为奇数

参考源码

代码语言:javascript
复制
#include <iostream>
using namespace std;
int main() {
    int n, num, ans;
    while (cin >> n) {
        ans = 1;
        while (n--) {
            cin >> num;
            if (num % 2 != 0) ans *= num;
        }
        cout << ans << endl;
    }
    return 0;
}

2007 平方和与立方和

Problem Description

给定一段连续的整数,求出他们中所有偶数的平方和以及所有奇数的立方和。

Input

输入数据包含多组测试实例,每组测试实例包含一行,由两个整数 m 和 n 组成。

Output

对于每组输入数据,输出一行,应包括两个整数 x 和 y,分别表示该段连续的整数中所有偶数的平方和以及所有奇数的立方和。 你可以认为 32 位整数足以保存结果。

Sample Input

1 3 2 5

Sample Output

4 28 20 152

解题思路

简单题,判断奇数和偶数,分别求立方和和平方和

参考源码

代码语言:javascript
复制
#include <algorithm>
#include <iostream>
using namespace std;
int main() {
    int m, n, ans1, ans2;
    while (cin >> m >> n) {
        ans1 = ans2 = 0;
        if (m > n) swap(m, n);  //注意 m,n大小
        for (int i = m; i <= n; i++) {
            if (i % 2 == 0)
                ans1 += i * i;  //平方和
            else
                ans2 += i * i * i;  //立方和
        }
        cout << ans1 << " " << ans2 << endl;
    }
    return 0;
}

2008 数值统计

Problem Description

统计给定的 n 个数中,负数、零和正数的个数。

Input

输入数据有多组,每组占一行,每行的第一个数是整数 n(n<100),表示需要统计的数值的个数,然后是 n 个实数;如果 n=0,则表示输入结束,该行不做处理。

Output

对于每组输入数据,输出一行 a,b 和 c,分别表示给定的数据中负数、零和正数的个数。

Sample Input

6 0 1 2 3 -1 0 5 1 2 3 4 0.5 0

Sample Output

1 2 3 0 0 5

解题思路

简单题,判断负数、零和正数并计数

参考源码

代码语言:javascript
复制
#include <iostream>
using namespace std;
int main() {
    int n, c1, c2, c3;
    double num;
    while (cin >> n && n) {
        c1 = c2 = c3 = 0;
        while (n--) {
            cin >> num;
            if (num < 0)
                c1++;
            else if (num == 0)
                c2++;
            else
                c3++;
        }
        cout << c1 << " " << c2 << " " << c3 << endl;
    }
    return 0;
}

2009 求数列的和

Problem Description

数列的定义如下: 数列的第一项为 n,以后各项为前一项的平方根,求数列的前 m 项的和。

Input

输入数据有多组,每组占一行,由两个整数 n(n<10000)和 m (m<1000) 组成,n 和 m 的含义如前所述。

Output

对于每组输入数据,输出该数列的和,每个测试实例占一行,要求精度保留 2 位小数。

Sample Input

81 4 2 2

Sample Output

94.73 3.41

解题思路

简单题,遍历 m 次循环求和

参考源码

代码语言:javascript
复制
#include <cmath>
#include <iostream>
using namespace std;
int main() {
    double n, m, ans;
    while (cin >> n >> m) {
        ans = 0;
        for (int i = 0; i < m; i++) {  //前 m 项
            ans += n;
            n = sqrt(n);  //更新
        }
        printf("%.2f\n", ans);
    }
    return 0;
}

相关内容

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021-03-05,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 写在前面
    • 2000 ASCII 码排序
      • 2001 计算两点间的距离
        • 2002 计算球体积
          • 2003 求绝对值
            • 2004 成绩转换
              • 2005 第几天?
                • 2006 求奇数的乘积
                  • 2007 平方和与立方和
                    • 2008 数值统计
                      • 2009 求数列的和
                      • 相关内容
                      领券
                      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档