西工大2016年计算机机试题

题目来源:西工大计算机(微信公众号)

第一题:跑步时间

在这里插入图片描述

思想:本题并不算太难,和实际中求平均值是一样的,而此处是求时间的平均值,时间的表示形式是 分 秒 毫秒;求平均值便由前向后求,余数转化为下一单位的数据进行平均值计算。
1、单行输入单行输出
#include<iostream>
using namespace std;
void average(int t[9])
{
	int a[3],temp1 = 0,temp2 = 0,temp3 = 0;        //三个临时变量用以分别保存 分 秒 毫秒 的和
	temp1 = t[0] + t[3] + t[6];
	temp2 = t[1] + t[4] + t[7] + temp1 % 3 * 60;      //分有余数 则转换为秒
	temp3 = t[2] + t[5] + t[8] + temp2 % 3 * 1000 ;//秒有余数 则转换为毫秒
	a[0] = temp1 / 3;
	a[1] = temp2 / 3;
	a[2] = temp3 / 3;
	for (int i = 0; i < 3; i++)
	{
		cout << a[i] << " ";
	}
}
int main()
{
	int n;  //行数
	cout << "Please input lines:";
	cin >> n;
	if (n <= 0)
		return 0;
	int a[9];//每行9个整数,分别表示三圈的分 秒 毫秒;
	for (int i = 0; i < n; i++)  //单行输入,单行输出
	{
		for (int j = 0; j < 9; j++)
		{
			cin >> a[j];
		}
		average(a);
		cout << endl;
	}
	return 0;
}
2、多行输入多行输出(和单行输入单行输入解决方法一样,直接用二维数组保存数据,便于多行输入多行输出)
#include<iostream>
using namespace std;
void average(int n,int t[10][9])
{

	int a[10][3],temp1,temp2,temp3;        //三个临时变量用以分别保存 分 秒 毫秒 的和
	for (int i = 0; i < n; i++)            //二维数组直接求平均值,i代表行数,控制i循环即可
	{
		temp1 = 0, temp2 = 0, temp3 = 0;
		temp1 = t[i][0] + t[i][3] + t[i][6];
		temp2 = t[i][1] + t[i][4] + t[i][7] + temp1 % 3 * 60;   //若分 取平均值之后有余数 则转换为秒
		temp3 = t[i][2] + t[i][5] + t[i][8] + temp2 % 3 * 1000;//秒有余数 则转换为毫秒
		a[i][0] = temp1 / 3;
		a[i][1] = temp2 / 3;
		a[i][2] = temp3 / 3;
	}

	for (int i = 0; i < n; i++)
	{
		for (int j = 0; j < 3; j++)
		{
			cout << a[i][j] << " ";
		}
		cout << endl;
	}
}
int main()
{
	int n;  //行数
	cout << "Please input lines:";
	cin >> n;
	if (n <= 0)
		return 0;
	int a[10][9];//最多10行,每行9个整数,分别表示三圈的分 秒 毫秒;
	for (int i = 0; i < n; i++)  //单行输入,单行输出
	{
		for (int j = 0; j < 9; j++)
		{
			cin >> a[i][j];
		}
	}                 //测试数据输入完毕
	average(n, a);    //调用取平均值子函数
	return 0;
}

第二题:排序

在这里插入图片描述

这样的题目见了好几次了,定长数组排序比较简单,可以调用排序函数或者自己写快排、冒泡等排序算法;但本题有点复杂,因为长度不固定,数组的长度需要从键盘读入。快速排序加二维数组多行输入输出数据元素。
#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
#include<string>
using namespace std;
void quickSort(int array[], int start, int end)        //快排,实现对一组数据进行排序;
{
	if (start >= end)                    //start end分别代表数组的第一个和最后一个位置
		return;
	int i, j, b;
	i = start;
	j = end;
	b = array[start];
	while (i < j)
	{
		while (i < j && array[j] >= b)
			j--;
		if (i < j)
		{
			array[i] = array[j];
			i++;
		}// 从右向左找比基准数小的数

		while (i < j && array[i] <= b)
			i++;
		if (i < j)
		{
			array[j] = array[i];
			j--;
		}// 从左向右找比基准数大的数
	}//一趟快排结束
	array[i] = b;       //基准数放入适当位置
	quickSort(array, start, j - 1);        //递归调用
	quickSort(array, i + 1, end);
}
int main()
{
	int num[20][20] = {0};    //最多20行,每行最多20个整数,必须初始化;
	int n;   //n表示行数
	cin >> n;
	if (n <= 0)
	{
		return 0;
	}
	for (int i = 0; i < n; i++) //遍历行数,每行输入不定长数组;
	{
		for (int j = 0; j < 20; j++)//数组长度不固定,最多有20位;
		{
			char c = ' ';           //初始化
			scanf("%d%c", &num[i][j], &c);  //从键盘获取不定长数组的方法
			if (c == '\n')
				break;
		}
	}

	for (int i = 0; i < n; i++)
	{
		int count = 0;
		while (num[i][count] != 0)
			count++;                      //获取数组长度
		quickSort(num[i], 0, count - 1);  //快排
	}
	 
	for (int i = 0; i < n; i++)
	{
		int count = 0;
		while (num[i][count] != 0)
			count++;
		for (int j = 0; j < count; j++)
			cout << num[i][j]<<" ";
		cout << endl;
	}
	return 0;
}

第三题:计算表达式

在这里插入图片描述

暂时没有思路,可以参考该篇博客

第四题:海伦公式求三角形面积

在这里插入图片描述

#include<iostream>
#include<cmath>
using namespace std;
bool judge(int a,int b,int c)    //判断三个数能否组成三角形
{
	if (a + b <= c || a + c <= b || b + c <= a)
		return false;
	else if (abs(a - b) >= c || abs(a - c) >= b || abs(b - c) >= a)
		return false;
	else
		return true;
}
int compute(int a, int b, int c)//利用海伦公式计算三角形的面积
{
	float p = (a + b + c) / 2;
	float result;
	result = sqrt(p * (p - a) * (p - b) * (p - c));
	return result;
}
int main()
{
	int n;
	cin >> n;
	if (n <= 0)
		return 0;
	int num[20][3] = { 0 };
	for (int i = 0; i < n; i++)
	{
		for (int j = 0; j < 3; j++)
		{
			cin >> num[i][j];
		}	
	}
	for (int i = 0; i < n; i++)
	{
		if (judge(num[i][0], num[i][1], num[i][2]))
			cout << compute(num[i][0], num[i][1], num[i][2]) << endl;
		else
			cout << "0.00" << endl;
	}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值