《考研机试》(二)机试题精讲

(一)题1:

解题思路:通过二维数组存取输入数据,之后通过一个函数判断是否存在‘E‘‘A‘‘S‘‘Y‘四个字母,最后根据返回值打印difficult/easy

     如何判断:传入二维数组的每一行(一行等于一个输入数据),定义2个指针,然后while循环读取

代码:

#include <iostream>
#include <iomanip>
#include <math.h>
#include <string.h>
using namespace std;

bool match(char a[]){
	int i = 0, j = 0;
	char temp[] = {‘E‘, ‘A‘, ‘S‘, ‘Y‘};
	while( i<1000&&j<=3 ){
		if( a[i]==temp[j] ){
			i++;
			j++;
		}else{
			i++;
		}
	}
	if( i>=1000 ){
		return false;
	}else{
		return true;
	}
} 

int main(void){
	cout << "输入字符串个数:" << " ";
	int n;
	cin >> n;
	cout << "Sample In:" << endl;
	char str[][1000] = {‘0‘};
	for(int i=0; i<n; i++){
		cin >> str[i];
	}
	cout << "Sample Out:" << endl;
	for(int i=0; i<n; i++){
		if(match(str[i])){
			cout << "easy" << endl;
		}else{
			cout << "difficult" << endl;
		}
	}
	return 0;
}

(二)题2:

 解题思路:这道题目更像是一道数学题,找规律,找小三角形数目

 代码:

#include <iostream>
#include <iomanip>
#include <math.h>
#include <string.h>
using namespace std;

int main(void){
	cout << "输入几组数据:" << " ";
	int n;
	cin >> n;
	int a[n];
	cout << "Simple In:" << endl;
	for(int i=0; i<n; i++){
		cin >> a[i];
	}
	cout << "Simple Out:" << endl;
	for(int i=0; i<n; i++){
		if( a[i]<3 ){
			cout << "边数输入错误" << endl;
		}
		if( a[i]%2==0 ){
			cout << (2*a[i]-4)*0.5 << endl;
		}
		if( a[i]%2!=0 ){
			cout << (2*a[i]-5)*0.5 << endl;
		}
	}

	return 0;
}

(三)题3:

 解题思路:这道题目首先通过定义二维数组(2行N列)存储数据,第一行存储每个人的折扣率,第二行存储每个人的折扣上限

     然后需要根据折扣率进行排序,从小到大(折扣率越小,折扣力度越大),根据总价格t分类,如果t超过所有人的折扣

     上限之和,那么肯定需要额外掏钱,否则则根据排序结果进行依次扣钱

代码:

#include <iostream>
#include <iomanip>
#include <math.h>
#include <string.h>
using namespace std;

//数组a已经根据折扣率从小到大排序完成
int zhekou(double a[2][100], int n, double t){

	int sum1 = 0;
	int sum2 = 0;
	int sum = 0;//一共应该付多少钱

	for(int i=0; i<n; i++)
	    sum1 += a[1][i];//计算全部折扣金额上限 

	if( sum1>t ){//全部折扣金额>总价格,说明可以用折扣付钱
		for(int j=0; j<n-1; j++){//从折扣力度最大到倒数第二个 

			t -= (int)a[1][j];//每次都去掉当前这个人的折扣上限
			if(t>0){//如果不够付
				sum += (int)(a[1][j]*a[0][j]);//sum加上折扣后的钱
			}
			int i = j+1;//下一个人
			if( i<n && t<a[1][i] ){//如果正好下一个人够付了
				sum += (int)(t*a[0][i]);//只需要加上需要付的那部分折扣后的钱
			}

		}
	}else{//全部折扣金额<总价格,说明要额外加钱
		for(int j=0; j<n; j++)
			sum2 += (int)(a[1][j]*a[0][j]);//全部折扣金额(折扣后的钱) 

		t = t - sum1;//去除全部折扣金额
		sum = sum2 + t;//额外的钱要加上
	}

	return sum;
} 

int main(){
	int N;//N个人
	double T;//总价T
	cout << "输入总人数:" << " ";
	cin >> N;
	cout << "输入总价格:" << " ";
	cin >> T;
	double a[2][100];
	for(int i=0; i<N; i++){
		double temp1 = 0;//折扣率
		double temp2 = 0;//折扣上限
		cin >> temp1;
		a[0][i] = temp1;//折扣率
		cin >> temp2;
		a[1][i] = temp2;//折扣上限
	}

	//按照折扣率排序,从小到大
	for(int i=0; i<N-1; i++){
		for(int j=0; j<N-i-1; j++){
			if( a[0][j] > a[0][j+1] ){

				double tempp1 = a[0][j];
				a[0][j] = a[0][j+1];
				a[0][j+1] = tempp1;

				double tempp2 = a[1][j];
				a[1][j] = a[1][j+1];
				a[1][j+1] = tempp2;
			}
		}
	}

	//传入zhekou(a, N, T)函数中的数组a已经有序了
	int number = zhekou(a, N, T);
	cout << "最小金额" << number << endl; 

	return 0;
}

原文地址:https://www.cnblogs.com/Whgy/p/12303928.html

时间: 2024-08-30 12:30:02

《考研机试》(二)机试题精讲的相关文章

《考研机试》(四)机试题精讲

1.题(一) 解析: 只需要知道一个三位数k:个位 = k%10   十位 = k/10%10   百位 = k/100  代码: #include<iostream> using namespace std; int main() { for(int i=100; i<1000; i++){ int gewei = i%10; int shiwei = i/10%10; int baiwei = i/100; int sum = (gewei*gewei*gewei)+(shiwei*

华为机试—二维数组列最小值

比较二维数组列最小值,组成一个新数组返回. 实现核心算法,不需要使用IO 输入:{{5,6,1,16},{7,3,9}} 输出:{1,3} import java.util.Arrays; public class Col { public static int[] getColMin(int a[][]) { int[] res = new int[a.length]; for (int i = 0; i < a.length; i++) { int[] s = a[i]; Arrays.so

华为校招机试—传送门

华为机试-多个数的最大公约数 华为机试-算日期 华为机试-拼音翻译成阿拉伯数字(只有数字拼音) 华为机试-拼音翻译成阿拉伯数字(有Wan,Qian,Bai,Shi单位) 华为机试-输出大写字母 华为机试-亮着电灯的盏数(优化过的双重for) 华为机试-从考试成绩中划出及格线 华为机试-亮着电灯的盏数(1-N完全平方数的个数) 华为机试-大数相减 华为机试-姓名的夫妻相 华为机试-元素按奇偶排序 (金字塔) 华为机试-地铁换乘(图文吐血整理) 华为机试-"十七进制"转"十进制&

2014华为机试西安地区B组试题

2014华为机试西安地区B组试题 题目一.亮着点灯的盏数 一条长廊里依次装有n(1≤n≤65535)盏电灯,从头到尾编号1.2.3.-n-1.n.每盏电灯由一个拉线开关控制.开始,电灯全部关着. 有n个学生从长廊穿过.第一个学生把号码凡是1的倍数的电灯的开关拉一下:接着第二个学生把号码凡是2的倍数的电灯的开关拉一下:接着第三个学生把号码凡是3的倍数的电灯的开关拉一下:如此继续下去,最后第n个学生把号码凡是n的倍数的电灯的开关拉一下.n个学生按此规定走完后,长廊里电灯有几盏亮着. 注:电灯数和学生

2014华为机试西安地区A组试题

2014华为机试西安地区A组试题 题目一.分苹果 M个相同苹果放到N个相同篮子里有多少种放法,允许有篮子不放. 1<=M<=10,1<=N<=10 例如5个苹果三个篮子,3,1,1 和 1,1,3是同一种放法 输入 7 3 输出 8 题目分析: 这道题类似于整数划分的题目,这是很早的一道ACM的题目,主要思路就是考递归. ①当苹果数目或者篮子数目为1时候,就只有一种可能 ②当苹果数目小于篮子数目的时候,按照苹果数目来分配 ③当苹果数目大于篮子数目的时候,空一个盘子 + 先每个盘子放

matlab机试试题及答案

2014年常用统计分析软件应用大赛机试试题 注意事项: 1.      请选手注意考场纪律,诚信参赛: 2.      请选手关闭所有的网络设备,一经查明即视为作弊,且不予以学分认证: 3.考试时间为60分钟,请选手合理分配: 4.请选手建立word文档把答案放入其中,并注明选手的信息(姓名-专业-学号-手机号-组号),统一以组号命名. 1.求f(x)=a*x^3+b*x^2-c*x+21的导数.(15分) 2.求方程f(x)=a*x^2-b*x+23的根(15分). 3.已知矩阵A =    

计算机考研机试指南(六) ——栈

机试指南 cha 3 栈的应用 括号匹配问题 1 #include <iostream> 2 #include <stdio.h> 3 #include <algorithm> 4 #include <queue> 5 #include <stack> 6 #include <math.h> 7 #include <string> 8 #include <string.h> 9 #include <std

2019浙大计算机考研机试模拟赛(2)——概念专题

题目链接   引用自晴神OJ A - 边覆盖 B - 极大独立集 C - 稳定婚姻问题 D - 笛卡尔树 没赶得上全程的比赛,就做了两道,后面两道以后有时间再补.两道都是概念题,比较基础~ 以下是题解 A - 边覆盖 Case Time Limit: 200 MS (Others) / 400 MS (Java)       Case Memory Limit: 256 MB (Others) / 512 MB (Java) Accepted: 199      Total Submission

考研机试真题(一)之排序

转载请标明出处:牟尼的专栏 http://blog.csdn.net/u012027907 题目1202:排序 时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:10071 解决:3549 题目描述: 对输入的n个数进行排序并输出. 输入: 输入的第一行包括一个整数n(1<=n<=100). 接下来的一行包括n个整数. 输出: 可能有多组测试数据,对于每组数据,将排序后的n个整数输出,每个数后面都有一个空格. 每组测试数据的结果占一行. 样例输入: 4 1 4 3 2 样例输出: 1