清华大学2003年复试上机题 解题报告

九度OJ 题目1068:球的半径和体积
时间限制:1 秒  内存限制:32 兆  特殊判题:否  提交:602  解决:198
题目描述:
    输入球的中心点和球上某一点的坐标,计算球的半径和体积
输入:
    球的中心点和球上某一点的坐标,以如下形式输入:x0 y0 z0 x1 y1 z1
输出:
    输入可能有多组,对于每组输入,输出球的半径和体积,并且结果保留三位小数
样例输入:
    0 0 0 1 1 1
样例输出:
    1.732 21.766
提示:
    为避免精度问题,PI值请使用arccos(-1)。
//清华2003:题目1068:球的半径和体积
//求给定序列的最大非空连续子序列和
#include <fstream>
#include <iostream>
#include <cmath>
using namespace std;
#define pi acos(-1.0)
double SQ( double x ){
	return x*x;
};

int main()
{
	double radias, distanceSQ, volume;
	double x0, x1, y0, y1, z0, z1;
	//ifstream cin("THU_1068.txt");
	while( cin >> x0 >> y0 >> z0 >> x1 >> y1 >> z1 ){
		distanceSQ = SQ(x0-x1) + SQ(y0-y1) + SQ(z0-z1);
		radias = sqrt( distanceSQ );
		volume = pi * distanceSQ * radias * 4 / 3;
		cout.setf(ios::fixed);
		cout.precision(3);
		cout << radias << " " << volume << endl;
	}
	//system("pause");
	return 0;
}


九度OJ 题目1069:查找学生信息
    时间限制:1 秒  内存限制:32 兆  特殊判题:否  提交:614  解决:161
题目描述:
     输入N个学生的信息,然后进行查询。
输入:
     输入的第一行为N,即学生的个数(N<=1000)
    接下来的N行包括N个学生的信息,信息格式如下:
    01 李江 男 21
    02 刘唐 男 23
    03 张军 男 19
    04 王娜 女 19
    然后输入一个M(M<=10000),接下来会有M行,代表M次查询,每行输入一个学号,格式如下:
    02
    03
    01
    04
输出:
     输出M行,每行包括一个对应于查询的学生的信息。
    如果没有对应的学生信息,则输出“No Answer!”
样例输入:
    4
    01 李江 男 21
    02 刘唐 男 23
    03 张军 男 19
    04 王娜 女 19
    5
    02
    03
    01
    04
    03
样例输出:
    02 刘唐 男 23
    03 张军 男 19
    01 李江 男 21
    04 王娜 女 19
    03 张军 男 19
//清华2003:题目1069:查找学生信息
//求给定序列的最大非空连续子序列和
//(0-9)->(48-57)
#include <fstream>
#include <iostream>
#include <string>
#include <cstring>
#include <memory.h>
using namespace std;

struct STUDENT{
	string indexS;
	string name;
	string gender;
	int age;
	int index;
};
STUDENT s[1000];
void search( int x, int &length, int &result ){	//length为输入学生数
	result = -1;
	for( int i=0; i<length; i++ ){
		if( s[i].index == x ){
			result = i;
			break;
		}
	}
};

int main()
{
	int n, m, i, j, ask, r, l, temp;	//r=result l=length
	ifstream cin("THU_1069.txt");
	cin >> n;
	for( i=0; i<n; i++ ){
		cin >> s[i].indexS >> s[i].name >> s[i].gender >> s[i].age;
		l = s[i].indexS.length();
		s[i].index = 0;
		temp = 1;
		for( j=l-1; j>=0; j-- ){
			//cout << s[i].indexS[j] << endl;
			s[i].index += temp * (s[i].indexS[j]-48);
			temp *= 10;
		}
		//cout << s[i].index << endl;
	}
	cin >> m;
	for( i=0; i<m; i++ ){
		cin >> ask;
		search( ask, n, r );
		if( r == -1 )
			cout << "No Answer!" << endl;
		else 
			cout << s[r].indexS << " " << s[r].name << " "
			<< s[r].gender << " " << s[r].age << endl;
	}
	system("pause");
	return 0;
}
以上为做过字符转数字处理的方法 好处是只需输入1即可检索01号学生 而不强制要求输入01 以下为未经转数字处理的一般方法 也能AC 可见九度OJ的测试数据没有类似用1来检索的情况
//清华2003:题目1069:查找学生信息
//求给定序列的最大非空连续子序列和
//(0-9)->(48-57)
#include <fstream>
#include <iostream>
#include <string>
#include <cstring>
#include <memory.h>
using namespace std;

struct STUDENT{
	string indexS;
	string name;
	string gender;
	int age;
};
STUDENT s[1000];
void search( string x, int &length, int &result ){	//length为输入学生数
	result = -1;
	for( int i=0; i<length; i++ ){
		if( s[i].indexS == x ){
			result = i;
			break;
		}
	}
};

int main()
{
	int n, m, i, j, r, l, temp;	//r=result l=length
	string ask;
	ifstream cin("THU_1069.txt");
	cin >> n;
	for( i=0; i<n; i++ )
		cin >> s[i].indexS >> s[i].name >> s[i].gender >> s[i].age;
		
	cin >> m;
	for( i=0; i<m; i++ ){
		cin >> ask;
		search( ask, n, r );
		if( r == -1 )
			cout << "No Answer!" << endl;
		else 
			cout << s[r].indexS << " " << s[r].name << " "
			<< s[r].gender << " " << s[r].age << endl;
	}
	system("pause");
	return 0;
}


九度OJ 题目1070:今年的第几天?
时间限制:1 秒  内存限制:32 兆  特殊判题:否  提交:304  解决:165
题目描述:
    输入年、月、日,计算该天是本年的第几天。
输入:
    包括三个整数年(1<=Y<=3000)、月(1<=M<=12)、日(1<=D<=31)。
输出:
    输入可能有多组测试数据,对于每一组测试数据,
    输出一个整数,代表Input中的年、月、日对应本年的第几天。
样例输入:
    1990 9 20
    2000 5 1
样例输出:
    263
    122
//清华2003:题目1070:今年的第几天?
//输入年、月、日,计算该天是本年的第几天。
//输入包括三个整数年(1<=Y<=3000)、月(1<=M<=12)、日(1<=D<=31)。
#include <fstream>
#include <iostream>
using namespace std;
int m[12]={31,28,31,30,31,30,31,31,30,31,30,31};

int main()
{
	int i, j, k;
	int year, month, day;
	ifstream cin("THU_1070.txt");
	while( cin >> year >> month >> day ){
		int extra=0, result=0;
		if( month > 2 )
			if( year%100 == 0 && year%400 == 0 
				|| year%100!=0 && year%4 == 0 )
				extra = 1;
		for( i=0; i<month-1; i++ )
			result += m[i];
		result += day;
		result += extra;
		cout << result << endl;
	}
	system("pause");
	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值