- 1:2000 ASCII码排序
- 2:2001 计算两点间距离
- 3:2002 计算球体积
- 4:2003 求绝对值
- 5:2004 成绩转换
- 6:2005 第几天?
- 7:2006 求奇数的乘积
- 8:2007 平方和与立方和
- 9:2008 数值统计
- 10:2009 求数列的和
- 11:2010 水仙花数
acm.hdu.edu.cn 2000-2099题
网址:http://acm.hdu.edu.cn/listproblem.php?vol=11
2000 ASCII码排序
题目内容
Problem Description
Input
Output
Sample Input
Sample Output
代码
#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 计算两点间距离
题目内容
代码
#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 计算球体积
题目内容
#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
持续更新中...
感谢杜老板分享/呲牙