acm.hdu.edu.cn 2000-2099题

文章目录[x]
  1. 1:2000 ASCII码排序
  2. 2:2001 计算两点间距离
  3. 3:2002 计算球体积
  4. 4:2003 求绝对值
  5. 5:2004 成绩转换
  6. 6:2005 第几天?
  7. 7:2006 求奇数的乘积
  8. 8:2007 平方和与立方和
  9. 9:2008 数值统计
  10. 10:2009 求数列的和
  11. 11:2010 水仙花数

acm.hdu.edu.cn 2000-2099题

网址:http://acm.hdu.edu.cn/listproblem.php?vol=11

2000 ASCII码排序

题目内容

Problem Description

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

Input

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

Output

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

Sample Input

qwe
asd
zxc

Sample Output

e q w
a d s
c x z

代码

#include <iostream>
#include <vector>
using namespace std;

int main() {
    vector<string>array_vec;
    string op;
    int num;
    char node;
    cout<<"请输入数据行数:";
    cin>>num;
    for(int i=0;i<num;i++) {
        cin>>op;
        array_vec.push_back(op);
    }
    for(int i=0;i<array_vec.size();i++){
        op=array_vec[i];
        for(int j=0;j<2;j++){
            for(int k=0;k<2;k++){
                if(op[k]>op[k+1]){
                    node=op[k];
                    op[k]=op[k+1];
                    op[k+1]=node;
                }
            }
        }
        printf("%c %c %c\n",op[0],op[1],op[2]);
    }
    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

代码

#include <iostream>
#include <vector>
#include <cmath>
using namespace std;

int main() {
    int num,spot;
    vector<int>data;
    cout<<"请输入数据行数:";
    cin>>num;
    for(int i=0;i<4*num;i++) {
        scanf("%d",&spot);
        data.push_back(spot);
    }
    for(int i=0;i<data.size();i+=4)
        printf("%.2f\n",sqrt((data[i+2]-data[i])*(data[i+2]-data[i])+(data[i+3]-data[i+1])*(data[i+3]-data[i+1])));
    return 0;
}

2002 计算球体积

题目内容

Problem Description
根据输入的半径值,计算球的体积。
Input
输入数据有多组,每组占一行,每行包括一个实数,表示球的半径。
Output
输出对应的球的体积,对于每组输入数据,输出一行,计算结果保留三位小数。
Sample Input
1
1.5
Sample Output
4.189
14.137
Hint

#define PI 3.1415927

代码

#include <iostream>
#include <vector>
#include <cmath>
#define Pi 3.1415927

using namespace std;

int main() {
    int num;
    float r;
    vector<float>data;
    cout<<"请输入数据行数:";
    cin>>num;
    for(int i=0;i<num;i++) {
        cin>>r;
        data.push_back(r);
    }
    for(int i=0;i<data.size();i++)
        printf("%.3f\n",(4/3.0*Pi*data[i]*data[i]*data[i]));
    return 0;
}

2003 求绝对值

题目内容

Problem Description
求实数的绝对值。

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

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

Sample Input
123
-234.00

Sample Output
123.00
234.00

代码

#include <iostream>
#include <vector>

using namespace std;

int main() {
    int num;
    float f;
    vector<float>data;
    cout<<"请输入数据行数:";
    cin>>num;
    for(int i=0;i<num;i++) {
        cin>>f;
        data.push_back(f);
    }
    for(int i=0;i<data.size();i++)
        if(data[i]<0)
            printf("%.2f\n",-data[i]);
        else
            printf("%.2f\n",data[i]);
    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!

代码

#include <iostream>
#include <vector>

using namespace std;

int main() {
    int num;
    int score;
    vector<int>data;
    cout<<"请输入数据行数:";
    cin>>num;
    for(int i=0;i<num;i++) {
        cin>>score;
        data.push_back(score);
    }
    for(int i=0;i<data.size();i++)
        if(data[i]>100 || data[i]<0)
            printf("Score is error!\n");
        else if(data[i]>=90)
            printf("A\n");
        else if(data[i]>=80)
            printf("B\n");
        else if(data[i]>=70)
            printf("C\n");
        else if(data[i]>=60)
            printf("D\n");
        else
            printf("E\n");
    return 0;
}

2005 第几天?

题目内容

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

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

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

Sample Input
1985/1/20
2006/3/12

Sample Output
20
71

代码

#include <iostream>
#include <vector>
#include <map>

using namespace std;

inline bool judge(int year){
    if((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0) )
        return true;
    return false;
}

struct date{
    int year;
    int month;
    int day;
};

int main() {
    int num,day_count=0;
    map<int,int>days;
    days[1]=31;
    days[2]=28;
    days[3]=31;
    days[4]=30;
    days[5]=31;
    days[6]=30;
    days[7]=31;
    days[8]=31;
    days[9]=30;
    days[10]=31;
    days[11]=30;
    days[12]=31;
    vector<date>data;
    date node;
    cout<<"请输入数据行数:";
    cin>>num;
    for(int i=0;i<num;i++) {
        scanf("%d/%d/%d",&node.year,&node.month,&node.day);
        data.push_back(node);
    }
    for(int i=0;i<data.size();i++){
        if(judge(data[i].year))
            days[2]=29;
        for(int j=1;j<data[i].month;j++)
            day_count+=days[j];
        day_count+=data[i].day;
        printf("%d\n",day_count);
        days[2]=28;
        day_count=0;
    }
    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

代码

#include <iostream>

using namespace std;

int main() {
    int num,*data,mutiplied=1;
    printf("请输入数据个数:");
    scanf("%d",&num);
    data=new int[num];
    for(int i=0;i<num;i++)
        cin>>data[i];
    for(int i=0;i<num;i++)
        if(data[i]%2==1)
            mutiplied*=data[i];
    printf("%d\n",mutiplied);
    return 0;
}

2007 平方和与立方和

题目内容

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

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

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

Sample Input
1 3
2 5

Sample Output
4 28
20 152

代码

#include <iostream>
#include <vector>

using namespace std;

struct unit{
    int x;
    int y;
};

int main() {
    int num,answer1=0,answer2=0;
    unit node;
    vector<unit>data;
    printf("请输入数据个数:");
    scanf("%d",&num);
    for(int i=0;i<num;i++){
        scanf("%d %d",&node.x,&node.y);
        data.push_back(node);
    }
    for(int i=0;i<num;i++) {
        for (int j = data[i].x; j <= data[i].y; j++) {
            if (j % 2 == 0)
                answer2 += (j * j);
            else
                answer1 += (j * j * j);
        }
        printf("%d %d\n",answer2,answer1);
        answer1=0;
        answer2=0;
    }
    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

代码

#include <iostream>
#include <vector>

using namespace std;

int main() {
    int num,positive=0,zero=0,negative=0,*array,data;
    printf("请输入数据个数:");
    scanf("%d",&num);
    if(num==0) return 0;
    for(int i=0;i<num;i++){
        scanf("%d",&data);
        if(data==0) zero++;
        else if(data>0) positive++;
        else negative++;
    }
    printf("%d %d %d\n",negative,zero,positive);
    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

代码

#include <iostream>
#include <cmath>

using namespace std;

double solve(float n,float m){
    if(m==1) return n;
    else return n+solve(sqrt(n),m-1);
}

int main() {
    float m,n;
    cin>>n>>m;
    printf("%.2f\n",solve(n,m));
    return 0;
}

2010 水仙花数

题目内容

Problem Description
春天是鲜花的季节,水仙花就是其中最迷人的代表,数学上有个水仙花数,他是这样定义的:
“水仙花数”是指一个三位数,它的各位数字的立方和等于其本身,比如:153=1^3+5^3+3^3。
现在要求输出所有在m和n范围内的水仙花数。

Input
输入数据有多组,每组占一行,包括两个整数m和n(100<=m<=n<=999)。

Output
对于每个测试实例,要求输出所有在给定范围内的水仙花数,就是说,输出的水仙花数必须大于等于m,并且小于等于n,如果有多个,则要求从小到大排列在一行内输出,之间用一个空格隔开;
如果给定的范围内不存在水仙花数,则输出no;
每个测试实例的输出占一行。

Sample Input
100 120
300 380

Sample Output
no
370 371

代码

#include <iostream>
#include <cmath>
using namespace std;

int main()
{
    int m,n;
    int a,b,c;
    bool flag = false;
    cin>>m>>n;
    for(int i=m;i<=n;i++){
        a=i/100;
        b=i/10-a*10;
        c=i%10;
        if(i==pow(a,3)+pow(b,3)+pow(c,3)) {
            cout << i << ' ';
            flag = true;
        }
    }
    if(!flag)
        cout<<"no";
    return 0;
}

Notice

持续更新中...

点赞
  1. 浪矢清说道:

    感谢杜老板分享/呲牙

发表评论