杭电2001-2010(c++版)

这篇博客详细介绍了杭电HDOJ从2001年至2010年的算法题目,包括计算两点间距离、球的体积、求绝对值、成绩转换等经典问题的分析与解题方法,涵盖了多种数学和编程技巧。
摘要由CSDN通过智能技术生成

杭电 HDOJ(2001——2010)

2001: 计算两点间距离

分析:坐标间两点间的距离:
坐标间两点间的距离公式

#include<iostream>
#include<cmath>
#include<iomanip>
using namespace std;
int main()
{
    double a,b,c,d;
while(cin>>a>>b>>c>>d)
{
   cout<<fixed<<setprecision(2)<<sqrt((a-c)*(a-c)+(b-d)*(b-d))<<endl;
   //sqrt((a-c)*(a-c)+(b-d)*(b-d))等价于sqrt(pow(a-c,2)+pow(b-d,2))
}
  return 0;
}

2002:计算球的体积

分析:半径是R的球的体积 计算公式是:V=(4/3)πr³

#include<iostream>
#include<iomanip>
#define PI 3.1415927
using namespace std;
int main()
{
    double r,a;
while(cin>>r)
{
    a=PI*(4.0/3)*r*r*r;//r*r*r等价于pow(r,3)
   cout<<fixed<<setprecision(3)<<a<<endl;
}
  return 0;
}

2003:求绝对值

分析:
方法1:绝对值函数——abs()

#include<iostream>
#include<iomanip>
using namespace std;
int main()
{
    double a;
while(cin>>a)
{
    a=abs(a);
   cout<<fixed<<setprecision(2)<<a<<endl;
}
  return 0;
}

方法2:三目运算符

a = a < 0 ? - a : a;

2004:成绩转换

方法1:用switch

#include<iostream>
#include<iomanip>
using namespace std;
int main()
{
 int a;
while(cin>>a)
{
	if(a>=0&&a<=100)
	{
	a=a/10;
	switch(a)
	{
		case 10:
		case 9:
			cout<<"A\n";break;
		case 8:
			cout<<"B\n";break;
		case 7:
			cout<<"C\n";break;
		case 6:
			cout<<"D\n";break;
		default:
			cout<<"E\n";break;
	}
	}
	else
		cout<<"Score is error!\n";
}
  return 0;
}

方法2:用if…else if…else

if (t>=90 && t<=100)
    cout<<"A\n";
else if (t>=80 && t<90)
    cout<<"B\n";
else if (t>=70 && t<80)
     cout<<"C\n";
else if (t>=60 && t<70)
	cout<<"D\n";    
else if (t>=0 && t<=59)
   	cout<<"E\n";
else 
 	cout<<"Score is error!\n";
    

2005:第几天?

需要区分闰年和平年

#include<iostream>
using namespace std;
int main() {
    int year, month, day;
    char c;
    while (cin >> year >>c>> month >>c>> day)
    {
        int sum = 0;
        int arr[12] = { 31,28,31,30,31,30,31,31,30,31,30,31 };
        if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0) 
			arr[1] = 29;
        for (int i = 0; i < month - 1; i++)
        {
            sum += arr[i];
        }
        sum += day;
        cout << sum << endl;
    }
    return 0;
}

2006:求奇数的乘积

#include<iostream>
using namespace std;
int main()
{
	int n,a,b;
	while(cin>>n)
	{
		b=1;
		while(n--)
		{
		cin>>a;
		if(a%2==1)b*=a;
		} 
	    cout<<b<<endl;
	}
	return 0;
}

2007:平方和立方和

#include<iostream>
using namespace std;
int main()
{
	int m,n,t,x,y;
	while(cin>>m>>n)
	{
	   x=0,y=0;
	  if(m>n){int t=m;m=n;n=t;} 
	  for(int i=m;i<=n;i++)
	  {
		  if(i%2==0)
			  x+=i*i;
		  else
			  y+=(i*i*i);
	  }
	  cout<<x<<" "<<y<<endl;
	}
	return 0;
}

2008:数值统计

#include<iostream>
using namespace std;
int main()
{
	int t;
	while(cin>>t)
	{
		if(t==0)
			continue;
		else
	{
		int a=0,b=0,c=0;
		double n;
	   while(t--)
	  {
		  cin>>n;
		  if(n<0)
			  a++;
		  else if(n==0)
			  b++;
		  else
			  c++;
	  }
	  cout<<a<<" "<<b<<" "<<c<<endl;
	}		
}
	return 0;
}

2009:求数列的和

#include<iostream>
#include<cstdio>
#include<iomanip>
using namespace std;
int main()
{
    int i;
    double n,m,sum;
    while(cin>>n>>m)
{
    sum=n*1.00;
    for(i=1;i<m;i++)
    {
        n=sqrt(n);
        sum+=n;
    }
    cout<<fixed<<setprecision(2)<<sum<<endl;
}
    return 0;
}

2010:水仙花数

#include<iostream>
using namespace std;
int main()
{
	int m,n,bai,shi,ge;
	while(cin>>m>>n)
	{
		int s=0;
		for(;m<=n;m++)
		{
			bai=m/100;
			shi=m/10%10;
			ge=m%10;
			if(ge*ge*ge+shi*shi*shi+bai*bai*bai==m)
			{
				if(s==0)
					cout<<m;	
				else
					cout<<" "<<m;
				s++;
			}
		}	
		if(s==0)
			cout<<"no"<<endl; 	
		else 
			cout<<"\n";
	}
	return 0;
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值