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

折戟厦大,考虑调剂济南大学,但是更想去的是杭师大,还是刷题,济南大学比厦门大学题目简单很多,因此一篇文章不多分析,直接给出代码,全部采用纯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,合影留念

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

CentOS Stream 8系统配置阿里云YUM源

Linux运维工具-ywtool 目录 一.系统环境二.修改yum文件2.1 CentOS-Stream-AppStream.repo2.2 CentOS-Stream-BaseOS.repo2.3 CentOS-Stream-Extras.repo 三.只有一个配置文件四.其他知识4.1 如果想要启用其他源,修改文件配置:enabled14.2 国内源链接 一.系统环境 CentOS Strea…

DevSecOps平台架构系列-微软云Azure DevSecOps平台架构

目录 一、概述 二、Azure DevOps和黄金管道 2.1 概述 2.2 Azure DevOps架构说明 2.2.1 架构及管道流程图 2.2.2 架构内容 2.2.2.1 Azure Boards 2.2.2.2 Azure Repos 2.2.2.3 Azure Test Plans 2.2.2.4 Azure Pipelines 2.2.2.5 Azure Application Insights 2.2.2.6…

论文阅读---VITC----Early Convolutions Help Transformers See Better

论文题目&#xff1a;Early Convolutions Help Transformers See Better 早期的卷积网络帮助transformers性能提升 vit 存在不合格的可优化性&#xff0c;它们对优化器的选择很敏感。相反现代卷积神经网络更容易优化。 vit对优化器的选择[40](AdamW [27] vs. SGD)&#xff0…

中间件学习--InfluxDB部署(docker)及springboot代码集成实例

一、需要了解的概念 1、时序数据 时序数据是以时间为维度的一组数据。如温度随着时间变化趋势图&#xff0c;CPU随着时间的使用占比图等等。通常使用曲线图、柱状图等形式去展现时序数据&#xff0c;也就是我们常常听到的“数据可视化”。 2、时序数据库 非关系型数据库&#…

机器学习实验作业一----knn算法

机器学习课程的第一个算法knn算法&#xff0c;全称K-Nearest Neighbor&#xff0c;k最邻近算法&#xff0c;为机器学习中最常用&#xff0c;也是最简单的算法。KNN通过测量不同特征值之间的距离来进行分类。本文实现的是较为简单的knn算法&#xff0c;包括测试集&#xff0c;训…

pytorch中关于BF16、FP16的一些操作

文章目录 前提创建BF16和FP16的数据BF16和FP16的二进制存储格式如何根据十进制数得到对应的二进制存储如何根据二进制存储计算对应的十进制数&#xff1f;第一种方法第二种方法 二进制乘法如果是负数怎么办&#xff1f;如何手动计算BF16对应的的二进制存储格式参考链接 前提 好…

湖北汽车工业学院 实验一 关系数据库标准语言SQL

头歌 实验一 关系数据库标准语言SQL 制作不易&#xff01;点个关注呗&#xff01;为大家创造更多的价值&#xff01; 目录 头歌 实验一 关系数据库标准语言SQL**制作不易&#xff01;点个关注呗&#xff01;为大家创造更多的价值&#xff01;** 第一关&#xff1a;创建数据库第…

Chrome/Edge 使用 Markdown Viewer 查看 Markdown 格式文件

Chrome/Edge 使用 Markdown Viewer 查看 Markdown 格式文件 0. 引言1. 安装 Markdown Viewer 插件2. 使用 Markdown Viewer 阅读 Markdown 格式文件 0. 引言 大部分程序员都喜欢 Markdown 格式的文件&#xff0c;这时给一些没有在电脑上安装 Markdown 编辑器的同事分享资料时&…

脏牛提权(靶机复现)

目录 一、脏牛漏洞概述 二、漏洞复现 1.nmap信息收集 1.1.查看当前IP地址 1.2.扫描当前网段&#xff0c;找出目标机器 1.3.快速扫描目标机全端口 三、访问收集到的资产 192.168.40.134:80 192.168.40.134:1898 四、msf攻击 1.查找对应exp 2.选择对应exp并配置相关设…

基于nodejs+vue健美操评分系统python-flask-django-php

本系统采用的数据库是MySQL&#xff0c;使用nodejs技术开发。在设计过程中&#xff0c;很好地发挥了该开发方式的优势&#xff0c;让实现代码有了良好的可读性&#xff0c;而且使代码的更新和维护更加的方便&#xff0c;操作方便&#xff0c;对以后的维护减少了很多麻烦。系统的…

wpf程序调用macad的c++编写的dll

1.把macad里的build&#xff0c;source文件夹复制到一个文件夹里 2.创建一个wpf项目&#xff0c;在解决方案里添加macad.occt项目 3.把macad.occt设为dll文件&#xff0c;修改平台工具集&#xff0c;在macadtest里引用macad.occt 4.运行&#xff0c;应该会报错&#xff0c;说找…

「09」媒体源:播放本地或在线的音视频GIF文件

「09」媒体源播放本地或在线的音视频GIF文件 通过媒体源功能&#xff0c;您可以添加自己想要展示的各种视频内容&#xff0c;例如自己的视频课程、电影或客户见证视频、以及GIF动画等。 &#xff08;图层叠加效果&#xff09; &#xff08;绿幕抠像叠加效果&#xff09; 缺点…

Covalent Network(CQT)的以太坊时光机:在 Rollup 时代确保长期数据可用性

以太坊正在经历一场向 “Rollup 时代” 的转型之旅&#xff0c;这一转型由以太坊改进提案 EIP-4844 推动。这标志着区块链技术的一个关键转折&#xff0c;采用了一种被称为“数据块&#xff08;blobs&#xff09;”的新型数据结构。为了与以太坊的扩容努力保持一致&#xff0c;…

解析汽车充电桩主板的常见故障表现、原因及应对方法

充电桩主板作为充电桩的核心组件&#xff0c;直接影响着充电桩运行的安全性与稳定性。然而&#xff0c;在使用过程中&#xff0c;充电桩主板难免会因各种原因而出现一些故障情况&#xff0c;因此&#xff0c;了解这些原因并采取相应的应对方法对维护充电桩的正常运行起着至关重…

c语言应该怎么系统的学习?

c语言应该怎么系统的学习? 系统性学习C语言&#xff0c;这个描述首先是给人目标不明确&#xff0c;概念不清晰的映像。在开始前我有一些资料&#xff0c;是我根据网友给的问题精心整理了一份「c语言的资料从专业入门到高级教程」&#xff0c; 点个关注在评论区回复“888”之后…

centos7 安装influxdb+telegraf+grafana 监控服务器

influxdb influxdb是一个时间序列数据库, 所有数据记录都会打上时间戳, 适合存储数字类型的内容 telegraf telegraf 可以用于收集系统和服务的统计数据并发送到influxdb grafana grafana 是一个界面非常漂亮, 可直接读取influxdb数据展示成各种图表的开源可视化web软件 安…

探索 JDK 11 的新特性:迈向 Java 平台的下一个里程碑

随着时间的推移&#xff0c;Java 平台一直在不断演进和改进&#xff0c;为开发人员提供更好的工具和功能。JDK 11 是 Java 平台的一个重要版本&#xff0c;引入了许多新的特性和改进&#xff0c;为开发人员带来了全新的体验和可能性。本文将介绍 JDK 11 中一些重要的新特性&…

python基础语法--快速入门

目录 一、字面量1.1定义 二、关键字三、注释四、引号五、输入输出六、缩进七、数据类型转换八、标识符九、运算符 一、字面量 1.1定义 字面量&#xff1a;在代码中&#xff0c;被写下来的固定的值。 python中哪些值可以被写下来&#xff0c;如何在代码中写他们呢&#xff1f;…

JavaWeb开发-前端HTML基础

1.HTML的基本语法 HTML是什么&#xff1f;&#xff1a;HTML是一种超文本标记语言&#xff0c;负责网页的结构&#xff0c;设计页面的元素内容等 超文本&#xff1a;超越文本限制&#xff0c;除了文本信息&#xff0c;还可以定义图片&#xff0c;音频&#xff0c;视频等标记语言…

2024 年广西职业院校技能大赛高职组《云计算应用》赛项赛题第 5 套

#需要资源或有问题的&#xff0c;可私博主&#xff01;&#xff01;&#xff01; #需要资源或有问题的&#xff0c;可私博主&#xff01;&#xff01;&#xff01; #需要资源或有问题的&#xff0c;可私博主&#xff01;&#xff01;&#xff01; 某企业根据自身业务需求&…