刷题日记——机试(1)

1. 字母排序

在这里插入图片描述

分析——不排序解题

  • 创建一个大小为128的数组sheet,序号表示ascii码强转为int表示的数值,对应的数组值表示该ascii码在输入字符串中出现的次数
  • 设置一个max变量和id变量,max初值为0,从下标为((int)‘A’)开始遍历sheet数组,找到最大的值赋给max,对应的数组序号赋给id,如果最大的max值为0,表明字符串已经打印完毕了,结束程序。
  • 将((char)id)打印max遍,然后回到第二步

代码——32行极简,比其他题解短10行

#include <iostream>
#include <string.h>
using namespace std;
int main() {
	char str[1001];
	while (scanf("%s", str) != EOF) {
		int length = strlen(str);
		int sheet[128] = {0};
		for (int i = 0; i < length; i++) {
			int index = (int)str[i];
			sheet[index]++;
		}
		while (true) {
			int max = 0;
			int id;
			for (int i = (int)'A'; i < 128; i++) {
				if (sheet[i] > max) {
					max = sheet[i];
					id = i;
				}
			}
			if (max == 0) {
				break;
			}
			for (int i = 0; i < max; i++) {
				printf("%c", (char)id);
			}
			sheet[id] = 0;
		}
		printf("\n");
	}
}

2. 动态查找的问题

在这里插入图片描述

分析——采用hash表

  • 数据总数不超过十万,可以将hash表长设置为十万,采用最简单的线性探测法,一旦发生冲突就往后找

代码

这段代码本来是用vs写的,但是vs这个软件老毛病就是总是觉得你写得不安全,然后不让你编译通过,于是抛弃vs使用dev c++
另外一个让我讨厌的是sql server,珍爱生命,远离ms家的软件。

// ConsoleApplication1.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//

#include <iostream>
using namespace std;
int num[100001];//静态内存区默认的初始值是0

int main() {
	int n;
	scanf("%d", &n);
	for (int i = 0; i < n; i++) {
		int temp;
		scanf("%d", &temp);
		int j = 0;
		while (true) { //线性探测法
			if (num[(temp + j) % 100000] == 0) {
				num[(temp + j) % 100000] = temp;
				break;
			}
			j++;
		}
	}
	int m;
	scanf("%d", &m);
	for (int i = 0; i < m; i++) {
		int temp;
		scanf("%d", &temp);
		int j = 0;
		while (true) { //线性探测法
			if (num[(temp + j) % 100000] == 0) {
				printf("no\n");
				num[(temp + j) % 100000] = temp;
				break;
			} else if (num[(temp + j) % 100000] == temp) {
				printf("find\n");
				break;
			}
			j++;
		}
	}

	return 0;
}

3. 分离字符串

在这里插入图片描述

分析

  • 使用if判断条件放入指定数组即可

代码

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

char abc[201];//字母
char _12[201];//数字
char spe[201];//符号

//将每次放入数组的操作写成一个函数,每次放入字符都在后面放一个结束符'\0',这样方便输出
void operate(char *a, int b, char c) {
	*(a + b) = c;
	*(a + b + 1) = '\0';
}

int main() {
	char str[201];
	while (scanf("%s", str) != EOF) {
		int p_a = 0, p_1 = 0, p_s = 0;
		int length = strlen(str);
		for (int i = 0; i < length; i++) {
			if (str[i] <= 'z' && str[i] >= 'a' || str[i] <= 'Z' && str[i] >= 'A') {
				operate(abc, p_a++, str[i]);
			} else if (str[i] <= '9' && str[i] >= '0' ) {
				operate(_12, p_1++, str[i]);
			} else {
				operate(spe, p_s++, str[i]);
			}
		}
		printf("%s\n%s\n%s\n", abc, _12, spe);
	}
	return 0;
}

4. 打印杨辉三角形

在这里插入图片描述

在这里插入图片描述

分析——使用队列构造

  1. 入队一个1
  2. 对行数 i i i 开始遍历,每行的元素数目等于行数 i i i
  3. i i i 行前 i − 1 i-1 i1 个元素循环执行这样的操作:
    • 队首元素值赋temp
    • 然后队首出队,打印temp值
    • temp值加上当前队首值,和入队
  4. i i i 行第 i i i 个元素一定是1,因此直接打印1和一个换行符,同时要将一个1入队

b站视频:【【3.6链队列和队列的应用(包括杨辉三角)-2 考研《数据结构C语言版》严蔚敏知识点讲解】】在49:40处对这一过程进行了手动推导,如果对上面的分析不理解,可以点击链接去听一下讲解。

代码

#include <cstdio>
#include <queue>
using namespace std;


int main() {
	int n;
	while (scanf("%d", &n) != EOF) {
		queue<int> tri;
		tri.push(1);
		for (int i = 0; i < n; i++) {//行遍历
			for (int j = 0; j < i; j++) {
				int temp = tri.front(); //获取队首
				tri.pop();
				printf("%d ", temp);
				temp += tri.front();
				tri.push(temp);
			}
			tri.push(1);
			printf("1\n");
		}
	}

	return 0;
}

5. 回文数判定

在这里插入图片描述

分析

数字位数都确定是5位了,直接用字符串接住,看看0和4序号、1和3序号的数字是不是一样的就好

代码

#include <cstdio>
#include <queue>
using namespace std;

int main() {
	char num[5];
	while (scanf("%s", num) != EOF) {
		getchar();
		if (num[0] == num[4] && num[1] == num[3]) {
			printf("Yes\n");
		} else {
			printf("No\n");
		}
	}
	return 0;
}

6.求三角形面积

在这里插入图片描述

分析——使用正弦公式计算面积

在这里插入图片描述

代码

#include <cstdio>
#include <queue>
#include <cmath>
using namespace std;

struct position {
	double x;
	double y;
};
position tri[3];

void caculate(double *str) {
	for (int i = 0; i < 3; i++) {
		tri[i].x = str[i * 2];
		tri[i].y = str[i * 2 + 1];
	}
	position a, b;
	a.x = tri[1].x - tri[0].x;
	a.y = tri[1].y - tri[0].y;
	b.x = tri[2].x - tri[0].x;
	b.y = tri[2].y - tri[0].y;

	double a_length = sqrt(pow(a.x, 2) + pow(a.y, 2));
	double b_length = sqrt(pow(b.x, 2) + pow(b.y, 2));

	double cos = (abs(a.x * b.x + a.y * b.y)) / (a_length * b_length);
	double sin = sqrt(1 - pow(cos, 2));
	double s = 0.5 * a_length * b_length * sin;
	printf("%.2lf\n", s);
}

int main() {
	double str[6];
	while (scanf("%lf", &str[0]) != EOF) {
		for (int i = 1; i < 6; i++) {
			scanf("%lf", &str[i]);
		}
		caculate(str);
	}

	return 0;
}

注意点

  • 所有的数值类型都应该是double,否则会报错
  • 下面这行代码,如果乘法不加括号,会出现错误答案
double cos = (abs(a.x * b.x + a.y * b.y)) / (a_length * b_length);

分析——使用海伦公式计算面积

【海伦公式】
在这里插入图片描述

代码

#include<bits/stdc++.h>
using namespace std;
struct point{
	double x;
	double y;
}A,B,C;

double len(point a,point b){
	return sqrt((a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y));
}
int main(){
	while(scanf("%lf %lf %lf %lf %lf %lf",&A.x,&A.y,&B.x,&B.y,&C.x,&C.y)!=EOF){
		double ac = len(A,C);
	 	double ab = len(A,B);
	 	double bc = len(B,C);
	 	double p = (ac+bc+ab)/2;
	 	double s = sqrt(p*(p-ac)*(p-bc)*(p-ab));
	 	printf("%.2lf\n",s);
	}
}

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

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

相关文章

考研数学|汤家凤《1800》题太多!怎么刷效果最好?

考研数学三的备考过程中&#xff0c;汤家凤1800题是很多考生选择的一本重要的习题集。它包含了大量的题目&#xff0c;难度覆盖了从基础到提高&#xff0c;甚至有一些题目的难度会超过实际考试的平均水平&#xff0c;目的是为了帮助考生全面提升解题能力&#xff0c;尤其是在应…

Golang | Leetcode Golang题解之第11题盛最多水的容器

题目&#xff1a; 题解&#xff1a; func maxArea(height []int) int {res : 0L : 0R : len(height) - 1for L < R {tmp : math.Min(float64(height[L]), float64(height[R]))res int(math.Max(float64(res), tmp * float64((R - L))))if height[L] < height[R] {L} el…

代码+视频,手动绘制logistic回归预测模型校准曲线(Calibration curve)(2)

校准曲线图表示的是预测值和实际值的差距&#xff0c;作为预测模型的重要部分&#xff0c;目前很多函数能绘制校准曲线。 一般分为两种&#xff0c;一种是通过Hosmer-Lemeshow检验&#xff0c;把P值分为10等分&#xff0c;求出每等分的预测值和实际值的差距 另外一种是calibrat…

扫描电镜如何能拍到样品的好的形貌?

扫描电镜是表征材料微观形貌的有力工具&#xff0c;它能够呈现样品的精细结构。然而&#xff0c;要拍摄出高质量的样品形貌并非易事&#xff0c;除了要熟悉扫描电镜的各种功能&#xff0c;还需要掌握一些技巧。本文将介绍如何利用景深、倾斜校正、动态聚焦等功能以及合轴和消像…

Day30 线程安全之窗口售票问题(含代码)

Day30 线程安全之窗口售票问题&#xff08;含代码&#xff09; 一、需求&#xff1a; 铁道部发布了一个售票任务&#xff0c;要求销售1000张票&#xff0c;要求有3个窗口来进行销售&#xff0c; 请编写多线程程序来模拟这个效果&#xff08; 注意&#xff1a;使用线程类的方式…

LABVIEW--正弦+高斯噪声信号及滤波

前面板信号 后面板 LABVIEW源程序链接&#xff1a;https://pan.baidu.com/s/11B-75i4fHZwWQyjxn9yCyQ?pwd7tfj 提取码&#xff1a;7tfj

设计模式之建造者模式:灵活可扩展的对象创建过程

目录 一、什么是建造者模式 二、建造者模式的应用场景 三、建造者模式的优缺点 3.1. 优点 3.2. 缺点 四、建造者模式示例 4.1. 问题描述 4.2. 问题分析 4.3. 代码实现 五、建造者模式的另一种实现方式 六、总结 一、什么是建造者模式 建造者模式&#xff08;Builder…

WEBAPIS知识案例总结(续)

其他事件 页面加载事件 加载外部资源&#xff08;如图片&#xff0c;外联css和js等&#xff09;加载完毕时触发的事件有时候需要等页面资源全部处理完之后做一些事情老代码喜欢把script写在head中&#xff0c;这时候直接找dom元素找不到事件名&#xff1a;load监听页面所有资…

【热门话题】Stable Diffusion:本地部署教程

&#x1f308;个人主页: 鑫宝Code &#x1f525;热门专栏: 闲话杂谈&#xff5c; 炫酷HTML | JavaScript基础 ​&#x1f4ab;个人格言: "如无必要&#xff0c;勿增实体" 文章目录 Stable Diffusion&#xff1a;本地部署教程一、引言二、环境准备1. 硬件配置2. …

考研数学|怎样刷题更有效率?这些坑千万别踩!

考研数学刷题的这些困扰相信大部分的同学都是有的&#xff0c;为此我整理了一些提高考研数学刷题效率的方法和策略&#xff0c;希望能帮助你更有效地学习和解题。 首先要制定合理的刷题计划&#xff0c;首先遵循“教材→视频→全书或辅导讲义→习题集→真题→专项训练→模拟套…

vue项目开发实战案例

目录 项目概述 1. 项目初始化 2. 商品展示 3. 购物车管理 4. 订单处理 5. 路由管理 6. 样式和交互优化 7. 部署和测试 总结 Vue.js 是一种流行的前端 JavaScript 框架&#xff0c;广泛应用于现代 Web 开发中。下面是一个简单的 Vue 项目开发实战案例&#xff0c;涵盖了…

C++的并发世界(七)——互斥锁

0.死锁的由来 假设有两个线程T1和T2&#xff0c;它们需要对两个互斥量mtx1和mtx2进行访问。而且需要按照以下顺序获取互斥量的所有权&#xff1a; -T1先获取mte1的所有权,再获取mt2的所有权。 -T2先获取 mtx2的所有权。再铁取 mtx1的所有权。 如果两个线程同时执行&#xff0c…

Redis主从复制、哨兵模式、Cluster集群

目录 一、Redis主从复制 1、主从复制介绍 2、主从复制原理 ​编辑 3、主从复制的作用 4.Redis主从复制实验搭建 1. 关闭防火墙和安装依赖环境 2. 解压安装包 3. 编译并安装到指定目录 4. 执行脚本文件 5. 做软连接 6. 启动redis并查看端口 7. 重启redis 8. 修改主…

秋招刷题4(动态规划)

1.购物单 import java.util.Scanner;public class Main {public static void main(String[] args){Scanner sc new Scanner(System.in);int N sc.nextInt();int m sc.nextInt();Goods[] goods new Goods[m];for(int i 0; i < m; i){goods[i] new Goods();}for(int i …

Matlab|含氢微网优化调度模型

目录 1 主要内容 模型示意图 目标函数 2 部分程序 3 程序结果 4 下载链接 1 主要内容 最近咨询含氢微网优化调度模型的同学较多&#xff0c;本次就分享一个高质量的源码资源。该程序方法复现《Simulation of design and operation of hydrogen energy utilization system…

数据生成 | Matlab实现基于K-means和SVM的GMM高斯混合分布的数据生成

数据生成 | Matlab实现基于K-means和SVM的GMM高斯混合分布的数据生成 目录 数据生成 | Matlab实现基于K-means和SVM的GMM高斯混合分布的数据生成生成效果基本描述模型描述程序设计参考资料 生成效果 基本描述 1.Matlab实现基于K-means和SVM的GMM高斯混合分布的数据生成&#xf…

揭秘动态内存管理,让你少走弯路!

1. 为什么要有动态内存分配 2. malloc和free 3. calloc和realloc 4. 常⻅的动态内存的错误 5. 动态内存经典笔试题分析 6. 柔性数组 7. 总结C/C中程序内存区域划分 正文开始&#xff1a; 1. 为什么要有动态内存分配 我们已经掌握的内存开辟⽅式有&#xff1a; int…

LeetCode---391周赛

题目列表 3099. 哈沙德数 3100. 换水问题 II 3101. 交替子数组计数 3102. 最小化曼哈顿距离 一、哈沙德数 简单的模拟题&#xff0c;代码如下 class Solution { public:int sumOfTheDigitsOfHarshadNumber(int x) {int s 0, tmp x;while(tmp){stmp%10;tmp/10;}return x…

Redis 5种数据结构常用命令

文章目录 1 字符串2 哈希3 列表4 集合5 有序集合 1 字符串 命令描述set key value设置指定key的值为valueget key获取指定key的值del key [key …]删除一个或多个keymset key value [key value …]设置多个key的值mget key [key …]获取一个或多个key的值incr key将key中储存的…

vue项目配置看板娘

这个博主讲的不错&#xff0c;很清楚&#xff0c;但是我实操时无法找到资源&#xff0c;一直报404找不到模型&#xff0c;苦恼了我很久也没解决&#xff0c;之后发现了 Evgo的项目&#xff0c;这就简单多了 最简单的引入Vue看板娘教程 一、项目引入 这里使用的是来自Evgo老哥…