虽然你看到的日期是1月份,但是实际上现在的日期是5月4日,我是更改了日期以后发的文章。作为一名即将毕业的大学鸟,刚过五一就赶快做些ACM题来练练手,在临毕业之前想给大学留下点什么,但是ACM就在这个月份,我只能匆忙的准备这几天了,因为一直在忙着研究cocos2d-x,所以就没什么时间来看其他的东西了,包括上课。本人对自己的所作所为无怨无悔,只有每天在编程中我才感觉自己不是在虚度大学光阴,毕业在即,实习在即,最后俩个月干的事真的需要很多,首先就是这个ACM了,无论结果如何,总要利用这几天的时间拼一把。好了,牢骚到此结束。我认为ACM时间不多,只能做些题了,所以就找来了杭州电子科技大学的ACM来做了,他们的oj官网是这个,你可以跟着我的脚步来做这些题,有问题我们一块讨论。每道题都有编号,我这里每做10道就会写篇博客,对自己的所学做一个总结,先来本篇博客的十道题。

杭电ACM(2000-2009)

//2000ASCII码排序
#include <iostream>

using namespace std;

int main()
{
	char a,b,c,tem;
	while(cin>>a>>b>>c)
	{
		for(int i=1;i<3;i++)
		{
			if(a>b)
			{
				tem = a;
				a = b;
				b = tem;
			}
			if(b>c)
			{
				tem = b;
				b = c;
				c = tem;
			}
		}

		cout<<a<<" "<<b<<" "<<c<<endl;
	}
	return 0;
}

杭电ACM(2000-2009)

杭电ACM(2000-2009)

//2001计算两点间的距离
#include <iostream>
#include <iomanip> //控制输出格式的头文件
#include <math.h> //sqrt的头文件
using namespace std;

int main()
{
	double x1,y1,x2,y2;
	double result = 0.0;
	cout<<fixed<<setprecision(2);
	while(cin>>x1>>y1>>x2>>y2)
	{
		//sqrt用来开方
		result = sqrt((x2-x1)*(x2-x1)+(y2-y1)*(y2-y1));
		//cout的输出中默认以6为精度
		cout<<result<<endl;
	}

	return 0;
}

杭电ACM(2000-2009)杭电ACM(2000-2009)

//2002计算球体积
#include <iostream>
#include <math.h> //pow函数的头文件
#include <iomanip> //用来控制格式化输出的

#define PI 3.1415927
/*球体积的公式为三分之四πR的三次方*/

using namespace std;

int main()
{
	double i;
	while(cin>>i)
	{
		//控制输出的格式
		cout<<fixed<<setprecision(3);
		//pow(i,3)代表i的三次方
		cout<<4.0/3.0*PI*pow(i,3)<<endl;
	}
	return 0;
}

杭电ACM(2000-2009) 杭电ACM(2000-2009)

//2003求绝对值
#include <iostream>
#include <iomanip> //控制格式化输出的
#include <math.h> //abs的头文件

using namespace std;

int main()
{
	double i;
	while(cin>>i)
	{
		cout<<fixed<<setprecision(2);
		//abs是用来求绝对值的
		cout<<abs(i)<<endl;
	}

	return 0;
}

杭电ACM(2000-2009)

//2004成绩转换
#include <iostream>

using namespace std;

int main()
{
	int score;
	while(cin>>score)
	{
		if(score>= 90 && score<= 100)
		{
			cout<<"A"<<endl;
		}
		else if(score>=80 && score <= 89)
		{
			cout<<"B"<<endl;
		}
		else if(score>=70 && score <= 79)
		{
			cout<<"C"<<endl;
		}
		else if(score>=60 && score <= 69)
		{
			cout<<"D"<<endl;
		}
		else if(score >=0 && score <= 59)
		{
			cout<<"E"<<endl;
		}
		else
		{
			cout<<"Score is error!"<<endl;
		}
	}

	return 0;
}

杭电ACM(2000-2009)

//2005第几天
#include <iostream>

using namespace std;

int main()
{
	//记录每个月份的天数
	int days[13] = {0,31,28,31,30,31,30,31,31,30,31,30,31};
	int year,month,day;
	char ch;
	//记录最后的结果
	int result;
	while(cin>>year>>ch>>month>>ch>>day)
	{
		//每次循环的时候将结果清0
		result = 0;
		//判断闰年的条件
		if((year%400 == 0) || (year%100 != 0 && year%4 == 0))
			days[2] = 29;
		else
			//把设置了的改回来
			days[2] = 28;

		for(int i=1;i<month;i++)
		{
			result += days[i];
		}
		result += day;
		cout<<result<<endl;
	}

	return 0;
}

杭电ACM(2000-2009)

//2006求奇数的乘积
#include <iostream>

using namespace std;

int main()
{
	int n;
	int * input;
	int result;
	while(cin>>n)
	{
		input = new int[n];
		result = 1;
		//读入这n个数据
		for(int i=0;i<n;i++)
		{
			cin>>input[i];
		}
		for(int i=0;i<n;i++)
		{
			//判断是否为奇数
			if(input[i]%2 != 0)
			{
				result *= input[i];
			}
		}
		cout<<result<<endl;
		delete input;
	}

	return 0;
}

杭电ACM(2000-2009) 杭电ACM(2000-2009)

//2007平方和与立方和
#include <iostream>
#include <math.h> //pow函数

using namespace std;

int main()
{
	int a,b;
	//用来保存结果
	int result_1,result_2;
	int tem;
	while(cin>>a>>b)
	{
		//这里很有可能犯的一个错误就是以为输入数据是先小后大,其实是不确定的
		if(a>b)
		{
			//交换a,b
			tem = a;
			a = b;
			b = tem;
		}
		result_1 = 0;
		result_2 = 0;
		for(int i=a;i<b+1;i++)
		{
			//判断奇数还是偶数
			if(i%2 == 0)
			{
				result_1 += (int)pow((double)i,2);
			}
			else
			{
				result_2 += (int)pow((double)i,3);
			}
		}
		cout<<result_1<<" "<<result_2<<endl;
	}

	return 0;
}

杭电ACM(2000-2009)

//2008数值统计
#include <iostream>

using namespace std;

int main()
{
	int n;
	int x,y,z;
	double a;
	while(cin>>n && n!=0)
	{
		//以下三个变量用来保存小于0,等于0,大于0的数的个数
		x = 0;
		y = 0;
		z = 0;
		for(int i=0;i<n;i++)
		{
			cin>>a;
			if(a<0)
				x++;
			else if(a==0)
				y++;
			else
				z++;
		}
		cout<<x<<" "<<y<<" "<<z<<endl;
	}

	return 0;
}

杭电ACM(2000-2009)

//2009求数列的和
#include <iostream>
#include <math.h> //sqrt的头文件
#include <iomanip> //控制格式化输出

using namespace std;

int main()
{
	double n;
	int m;
	double sum;
	while(cin>>n>>m)
	{
		//sum用来保存最后的结果
		sum = 0.0;
		for(int i=0;i<m;i++)
		{
			sum += n;
			n = sqrt(n);
		}
		cout<<fixed<<setprecision(2)<<sum<<endl;
	}

	return 0;
}

杭电ACM(2000-2009)

通过以上题目的解决,首先对从控制台读取输入数据应该很熟悉了,根据不同的题目要求,应该使用不同的方法从控制台读取输入数据,每次读取完数据然后按照题目的要求进行处理,一般在循环的最后输出就可以了。然后是对一些数学函数的使用,比如求方的pow函数,求平方根的sqrt函数,求绝对值的abs函数,使用的时候需要注意一下参数的类型。再然后就是控制格式化的输出,比如如何输出保留俩位小数的结果,还有就是对数据的类型要注意一下。最后就是细心一点了,这些题目不难,多练应该就熟悉了。