刷题日记——济南大学机试

news2024/11/13 20:36:50

折戟厦大,考虑调剂济南大学,但是更想去的是杭师大,还是刷题,济南大学比厦门大学题目简单很多,因此一篇文章不多分析,直接给出代码,全部采用纯C语言编写并且AC,不用C++的stl库。
争取今天一口气刷完济南大学的机试题目!

本次博客不分段,是一篇长博文,十分硬(jian)核(dan),建议配合目录查阅

济南大学机试题目链接,请点这里哟

字符串转化

在这里插入图片描述

代码

#include <stdio.h>

int main() {
	char num[1000];
	while (scanf("%s", num) != EOF) {
		int sum = 0;
		int i = 0;
		while (num[i] != '\0') {
			sum += num[i] - 'a' + 1;
			i++;
		}
		printf("%d\n", sum);
	}
	return 0;
}

整数去重

在这里插入图片描述

代码——列表避免暴力(空间换时间)

#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>

int num[20001];


int main() {
	int n;

	while (scanf("%d", &n) != EOF) {
		int real_n = 0;
		bool sheet[100] = {false};
		for (int i = 0; i < n; i++) {
			int temp;
			scanf("%d", &temp);
			if (sheet[temp] == false) {
				num[real_n++] = temp;
				sheet[temp] = true;
			}
		}
		for (int i = 0; i < real_n; i++) {
			printf("%d ", num[i]);
		}
		printf("\n");
	}
	return 0;
}

本题注意事项

  • 本题有暴力方法,就是从头开始二重遍历,在后面遇到相同的元素就整体前移,这个方法十分耗时。
  • C语言使用bool类型需要使用到stdbool.h头文件,不然会报错

更多关于C标准库的知识,可以参考以下的链接,建议考前还是突击一下,不然这个不知道真的很伤

  • 常见15个C语言的标准库
  • C 标准库 - 参考手册

求斐波那契数列的第n项

在这里插入图片描述

代码

肥波的题目真的做yue了,眼睛闭上代码都能写出来。

#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>

unsigned long long f(int n) {
	if (n == 0 || n == 1 ) {
		return 1;
	}
	return f(n - 1) + f(n - 2);
}

int main() {
	int n;
	while (scanf("%d", &n) != EOF) {
		printf("%lld\n", f(n));
	}
	return 0;
}

进制转换问题

在这里插入图片描述

代码

#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>

int main() {
	int n;
	scanf("%d", &n);
	int num[100];
	int i = 0;
	while (n != 0) {
		num[i] = n % 2;
		n /= 2;
		i++;
	}
	for (; i >= 1; i--) {
		printf("%d", num[i-1]);
	}
	printf("\n");
	return 0;
}

奇数还是偶数

在这里插入图片描述

代码

#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#include <string.h>

char *f(int n) {
	if (n % 2 == 0) {
		return "even number";
	}
	return "odd number";
}

int main() {
	int n;
	while (scanf("%d", &n) != EOF) {
		printf("%s\n", f(n));
	}
	return 0;
}

找出众数

在这里插入图片描述

代码——缝缝补补

#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#include <string.h>



int main() {
	int n;
	while (scanf("%d", &n) != EOF) {
		int ptr[20000] = {0};
		int *counts = ptr + 10000;
		int index[501];
		int single_num = 0;
		for (int i = 0; i < n; i++) {
			int temp;
			scanf("%d", &temp);
			if (counts[temp] == 0) {//首次出现需要记录下标
				index[single_num++] = temp;//不记录重复出现的值
			}
			counts[temp]++;//计数
		}
		//找最大counts值的index值
		int max = 0;
		int tag;
		for (int i = 0; i < single_num; i++) {
			if (max < counts[index[i]]) {
				max = counts[index[i]];
				tag = index[i];
			}
		}
		printf("%d\n", tag);
	}
	return 0;
}

分析——缝缝补补法

这题比较有意思,我的题解代码经过三轮迭代:

  • 第一轮:我一开始以为输入的所有数字都是1-1000,因此直接设置一个容量为1001的数组,序号是输入数字,数组值是出现次数,这样就像上面的整数去重一样,但是发现只能过三分之一的样例

  • 第二轮:还好我有大会员,看了发现是输入数字竟然是四位的,于是数组容量设置成10000,结果还是只能过83.3%的样例,再看输入,发现居然有负数输入

  • 第三轮:于是再改,直接把输入数组设置成容量为20000,同时为了最小变动,数组改名叫ptr,原来的数组名设置成为指针,指向ptr+10000的位置,这样你有负数我也不怕了

但是这样有个问题,就是,如果我提前不知道测试样例,我是不可能对第一轮的代码产生质疑的,肯定要想很久,到这里我就不得不喷N诺的开发者了,我们可以忍受你在网站上投放广告,或者要求我们帮你宣传,这些都可以,但是非要花30买小会员才能刷题(这人多也赚得够多了),非要花200才能告诉我们测试用例,复试机试就那么一两个月的事,你非要让我们200买一年真的太离谱了,一直这么玩,你不可能推广的开的

分析——全适应法(改进版:使用hash)

思路就是设置 数值-出现次数-序号 三个数据捆绑关系,这样有一个不方便的地方就是,每次判断数值是否出现时需要遍历
当然我有个粗略的改进方案,比如说把数组改成hash,模500放入,但是需要设置线性探测等避免冲突的方法。

括号匹配的问题

在这里插入图片描述

分析——数组模拟栈

使用C语言,没有栈的标准库,于是自己动手用数组模拟一个栈,需要实现pop和push,详细请看代码

代码

#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#include <string.h>

char stack[1000];
int size = 0;

void pop() {
	stack[--size] = '\0';
}

void push(char n) {
	stack[size++] = n;
}


int main() {
	char str[1000];
	while (scanf("%s", str) != EOF) {
		//初始化
		size = 0;

		//获取长度
		int length = 0;
		while (str[length++] != '\0');
		//此外还可以用string.h中的int strlen(char str)获取str的长度
		//也可以用sizeof()
		int i;
		for (i = 0; i < length; i++) {
			if (str[i] == '[' || str[i] == '(') {
				push(str[i]);
			} else if (str[i] == ']') {
				if (stack[size - 1] == '[') {
					pop();
				} else {
					printf("NO");
					break;
				}
			} else if (str[i] == ')') {
				if (stack[size - 1] == '(') {//需要注意,栈顶元素的序号是size-1
					pop();
				} else {
					printf("NO");
					break;
				}
			}

		}
		if (i == length) {
			printf("YES");
		}
		printf("\n");
	}
	return 0;
}

单词翻转

在这里插入图片描述

代码

#include <stdio.h>
#include <string.h>

char str_seq[1001][16];
char temp[10000];

int main() {
	fgets(temp, 10000, stdin);
	int length = strlen(temp);
	int ptr = 0;
	int i = 0;
	while (ptr < length) {
		int j = 0;
		while (temp[ptr] != ' ' && temp[ptr] != '\n') {
			str_seq[i][j++] = temp[ptr++];
		}
		str_seq[i][j] = '\0';
		i++;
		ptr++;
	}
	for (int k = i - 1; k >= 0; k--) {
		printf("%s ", str_seq[k]);
	}
	printf("\n");

}

注意点

在翻阅别人的题解时注意到一个可以减少思考复杂度的点:

  • 将输入字符串的最后一个’\n’字符pop出去
  • 在原有’\n’字符替换成为空格’ ’

在这里插入图片描述
但注意,这是c++语法对string的操作

喝饮料问题

在这里插入图片描述

代码

一开始当成了0-1背包问题,写出的代码只能过40%样例

#include <stdio.h>
#include <string.h>
#include <math.h>
#include <stdbool.h>

struct drink {
	int mi;
	int wi;
};

struct drink shop[1001];
double dp[1001][1001];

int max(int a, int b) {
	if (a > b) {
		return a;
	}
	return b;
}

int main() {
	int n, x;
	while (true) {
		scanf("%d %d", &x, &n);
		if (x == -1 && n == -1) {
			break;
		}
		//初始化dp
		for (int i = 0; i <= n; i++) {
			dp[i][0] = 0;
		}
		for (int i = 0; i <= x; i++) {
			dp[0][i] = 0;
		}
		for (int i = 1; i <= n; i++) {
			scanf("%d %d", &shop[i].mi, &shop[i].wi);
		}

		//开始0-1背包
		for (int i = 1; i <= n; i++) {
			for (int j = 1; j <= x; j++) {
				if (shop[i].wi > j) {
					//装不下
					dp[i][j] = dp[i - 1][j];
				} else {
					dp[i][j] = max(dp[i - 1][j], dp[i - 1][j - shop[i].wi] + shop[i].mi);
				}
			}
		}
		printf("%.3f\n", dp[n][x]);
	}
	return 0;
}

后来发现根本没有背包问题复杂,就是把最实惠的饮料全部喝了,把钱全部用完就好了

#include <stdio.h>
#include <string.h>
#include <math.h>
#include <stdbool.h>

int value[1001];
int weigh[1001];
double worth[1001];

int find_max_index(int n) {
	double large = -1;
	int index;
	for (int i = 0; i < n; i++) {
		if (worth[i] > large) {
			index = i;
			large = worth[i];
		}
	}
	return index;
}

int main() {
	int n, x;
	while (true) {
		scanf("%d %d", &x, &n);
		if (x == -1 && n == -1) {
			break;
		}

		for (int i = 0; i < n; i++) {
			scanf("%d %d", &weigh[i], &value[i]);
			worth[i] = (double)weigh[i] / value[i];
		}
		double result = 0;
		int counts = 0;
		while (counts != n) {
			int index = find_max_index(n);
			if (x >= value[index]) {
				result += weigh[index];
				x -= value[index];
			} else {
				result += worth[index] * x;
				x -= x;
			}
			counts++;
			worth[index] = -1;
		}
		printf("%0.3f\n", result);
	}
	return 0;
}

简单的背包问题

在这里插入图片描述

代码——这是真的背包问题了

但是与01背包问题有区别,比01背包更简单,可以将01背包的weigh和value令为相同的值

#include <stdio.h>
#include <string.h>
#include <math.h>
#include <stdbool.h>

int weigh[1000];
int value[1000];

int dp[1000][1000];

int max(int a, int b) {
	if (a > b) {
		return a;
	} else {
		return b;
	}
}

int main() {
	int s, n;
	while (scanf("%d %d", &s, &n) != EOF) {
		for (int i = 1; i <= n; i++) {
			scanf("%d", &weigh[i]);
			value[i] = weigh[i];
		}
		//初始化dp
		for (int i = 0; i <= n; i++) {
			dp[i][0] = 0;
		}
		for (int i = 0; i <= s; i++) {
			dp[0][i] = 0;
		}
		bool flag = false;
		for (int i = 1; i <= n; i++) {
			for (int j = 1; j <= s; j++) {
				if (weigh[i] > j) {
					dp[i][j] = dp[i - 1][j];
				} else {
					dp[i][j] = max(dp[i - 1][j], dp[i - 1][j - weigh[i]] + value[i]);
				}
				if (dp[i][j] == s) {
					flag = true;
				}
			}
		}
		if (flag == true) {
			printf("YES\n");
		} else {
			printf("NO\n");
		}
	}
	return 0;
}

全部AC,合影留念

在这里插入图片描述
记录一下心情,下午收到杭师大老师的回复,算是我折戟厦大后一束希望之光,下面全力冲刺杭师大调剂!争取笔试满分!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1545986.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Python学习笔记(二)

一&#xff1a;异常&#xff1a; 1.1&#xff1a;异常处理&#xff1a; 1.2&#xff1a;异常捕获&#xff1a; 1.3&#xff1a;异常传递&#xff1a; 二&#xff1a;模块&#xff1a; 2.1&#xff1a;模块的定义&#xff1a; 2.2&#xff1a;模块的导入&#xff1a; 2.3&…

vue3+ts+elementplus写一个登录页面教程

文章目录 前言1. 安装 Vue CLI 和 TypeScript 支持2. 创建登录组件 文章重点内容 前言 前期准备步骤&#xff1a; 创建一个使用 Vue 3 和 TypeScript 的登录页面涉及到多个步骤。以下是一个基本的教程&#xff0c;帮助你从头开始构建这样一个页面&#xff1a; 1. 安装 Vue CL…

电路笔记 :灯光画 元器件焊接+连锡处理

https://oshwhub.com/qazwsx1987/dengguanghua_0#P3 基础工具 常用的电路焊接工具&#xff1a; 工具描述电烙铁我买了一个便携电烙铁&#xff0c;但是烙铁头温度太低&#xff0c;焊锡总是粘在烙铁头上&#xff08;因为电量不足&#xff09;, 打火机秒变电烙铁焊台用于支撑工…

突破创作瓶颈:Kompas.ai的创意激发法

在创作的世界里&#xff0c;灵感如同一股清泉&#xff0c;滋养着每一个创作者的心灵。然而&#xff0c;即便是最富创造力的头脑&#xff0c;也难免会遇到创作瓶颈——那些令人窒息的、灵感枯竭的时刻。这些瓶颈不仅阻碍了创作的进程&#xff0c;还可能严重影响内容的质量和创作…

程序员35岁会失业吗?【来自主流AI的回答】

程序员35岁会失业吗&#xff1f; 35岁被认为是程序员职业生涯的分水岭&#xff0c;许多程序员开始担忧自己的职业发展是否会受到年龄的限制。有人担心随着年龄的增长&#xff0c;技术更新换代的速度会使得资深程序员难以跟上&#xff1b;而另一些人则认为&#xff0c;丰富的经…

卷起来——高级数据分析师

要成为一名高级数据分析师&#xff0c;需要掌握一系列的技能&#xff0c;包括数据处理、统计分析、机器学习、数据可视化以及业务理解等&#xff0c;喜欢或者想往这方面发展的童鞋们&#xff0c;卷起来&#xff0c;点击以下链接中的链接&#xff0c;备注"分析"进群交…

MySQL事务(超详细!!!)

目录 一、MySQL事务的概念 二、事务的ACID特点 1、原子性&#xff08;Atomicity&#xff09; 2、持久性 3、隔离性&#xff08;Isolation&#xff09; 3.1 事务的并发问题 ①、脏读(读取未提交数据) ②读已提交、不可重复读(前后多次读取&#xff0c;数据内容不一致) …

深入探讨Maven打包:打造精致的Zip包

在部署Spring Boot生产项目时&#xff0c;首先需要使用Maven将其打包成一个JAR文件或者包含JAR文件的ZIP文件。随后&#xff0c;通过堡垒机将打包好的文件上传至服务器进行部署&#xff0c;或构建成Docker镜像进行发布。在这一过程中&#xff0c;我们需要将项目中的配置文件或静…

I.MX6ULL_Linux_驱动篇(56)linux PWM驱动

PWM 驱动简析 设备树 PWM 控制器节点 I.MX6ULL 有 8 路 PWM 输出&#xff0c;因此对应 8 个 PWM 控制器&#xff0c;所有在设备树下就有 8 个PWM 控制器节点。这 8 路 PWM 都属于 I.MX6ULL 的 AIPS-1 域&#xff0c;但是在设备树 imx6ull.dtsi 中分为了两部分&#xff0c; PW…

科技引领趋势:3D元宇宙展厅在各行业中的应用及其未来展望

随着技术的不断进步&#xff0c;3D元宇宙展厅正逐渐成为各行各业展示产品的新选择。相较于传统的线下展厅&#xff0c;3D元宇宙展厅以其独特的优势&#xff0c;为产品展示和品牌推广提供了全新的可能性。 一、虚拟与现实的完美融合 3D元宇宙展厅是指在虚拟世界中构建的三维展览…

提升质量透明度,动力电池企业的数据驱动生产实践 | 数据要素 × 工业制造

系列导读 如《“数据要素”三年行动计划&#xff08;2024—2026年&#xff09;》指出&#xff0c;工业制造是“数据要素”的关键领域之一。如何发挥海量数据资源、丰富应用场景等多重优势&#xff0c;以数据流引领技术流、资金流、人才流、物资流&#xff0c;对于制造企业而言…

一身素衣凭栏观景,携几缕清风伴皓月入梦

这个国风两件套真的很难不爱一套上身简直就是梦中的白月光素净优雅又不失清冷气质波浪型门襟绣加上花枝缠绕的绣花图案增添了设计感的同时又不失美感半裙做的是A摆小伞裙的版型裙摆的分割和收褶处理增加了层次感半裙里布很贴心的做了裤里&#xff0c;不易走光夏天穿上这套出街一…

JavaScript 学习日记(1)---初识JavaScript

初识JavaScript 文章目录 初识JavaScript一、JavaScript 是什么?二、java 和JavaScript 的关系三、JavaScript 的组成四、JS的基本输入输出 ---> 单行注释五、js变量基本概念六、js基本数据类型七、js转义字符八、js类型转换九、运算符 END! 一、JavaScript 是什么? 我们…

ESCTF赛题WP

ESCTF_reverse题解 逆吧腻吧babypybabypolyreeasy_rere1你是个好孩子完结撒花 Q_W_Q 逆吧腻吧 下载副本后无壳&#xff0c;直接拖入ida分析分析函数逻辑&#xff1a;ida打开如下&#xff1a;提取出全局变量res的数据后&#xff0c;编写异或脚本进行解密&#xff1a; a[0xBF, …

Canine IP-10/CXCL 10 ELISA试剂盒上新

科研用Canine IP-10/CXCL 10 ELISA试剂盒重磅来袭&#xff0c;将在免疫学、癌症研究与神经科学等多个领域助力各位老师们的研究&#xff01; 图1&#xff1a;犬IP-10/CXCL10结构预测&#xff08;图片来源&#xff1a;UniProt&#xff09; C-X-C基序趋化因子(C-X-C motif chemok…

Ubuntu安装教程——Desktop版本(细致入微的操作)

目录 前言 一、安装Ubuntu桌面版操作系统 二、UbuntuLive版安装 1.语言选择 2.键盘布局 3.版本选择 4.网络配置 5.代理配置 6.镜像地址 7.磁盘划分 8.设置用户信息 9.ssh 10.选择软件包 11.安装界面 12.基础配置 12.1root用户 12.2时区 12.3包管理工具 12…

慧天[HTWATER]与主流耦合模拟软件模拟结果都对比

慧天[HTWATER]软件简介 针对城市排水系统基础设施数据管理的需求&#xff0c;以及水文、水力及水质模拟对数据的需求&#xff0c;实现了以数据库方式对相应数据的存储。可以对分流制排水系统及合流制排水系统进行地表水文、管网水力、水质过程的模拟计算。可以对城市低影响开发…

基于springboot+vue+Mysql的校园博客系统

开发语言&#xff1a;Java框架&#xff1a;springbootJDK版本&#xff1a;JDK1.8服务器&#xff1a;tomcat7数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09;数据库工具&#xff1a;Navicat11开发软件&#xff1a;eclipse/myeclipse/ideaMaven包&#xff1a;…

数据结构从入门到精通——归并排序

归并排序 前言一、归并排序的基本思想二、归并排序的特性总结三、归并排序的动画展示四、递归实现归并排序的具体代码展示五、非递归实现归并排序 前言 归并排序是一种分治策略的排序算法。它将一个序列分为两个等长&#xff08;几乎等长&#xff09;的子序列&#xff0c;分别…

Linux--Flappy_bird实现

目录 void handler(int sig): mian: void init_curses() int set_timer(int ms_t); 小鸟的操作&#xff1a; void show_pipe()&#xff1a; void create_list() void clear_pipe() void move_pipe(); test_bird.c完整代码&#xff1a; 代码实现&#xff1a; #includ…