HJ14 字符串排序HJ15 求int型正整数在内存中存储时1的个数HJ17 坐标移动

本文主要是介绍HJ14 字符串排序HJ15 求int型正整数在内存中存储时1的个数HJ17 坐标移动,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

HJ14 字符串排序

字符串排序_牛客题霸_牛客网

题目分析

使用C++的标准库函数sort来简单解决。首先,我们读取给定数量的字符串,然后使用sort函数对它们进行字典序排序,最后输出排序后的字符串列表。

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;int main() {int n;cin >> n; // 读取字符串的数量vector<string> strs(n);for (int i = 0; i < n; ++i) {cin >> strs[i]; // 读取每个字符串}sort(strs.begin(), strs.end()); // 使用sort函数按字典序对字符串进行排序for (const string& str : strs) {cout << str << endl; // 输出排序后的字符串}return 0;
}

我的题解:

一开始不知道sort可以直接排序字符串,于是自己写了一个比较函数逐字符比较

#include <iostream>
#include <string>
#include <vector>
#include <algorithm>bool compare(std::string &a, std::string &b) {for (int i = 0; i < std::min(a.size(), b.size()); i++) {if (a[i] != b[i]) return a[i] < b[i];}return a.size() <= b.size();
}int main() {int n = 0;std::string word;std::vector<std::string> words;std::cin >> n;while (n--) {std::cin >> word;words.push_back(word);}std::sort(words.begin(), words.end(), compare);for (auto i:words) {std::cout << i << std::endl;}return 0;
}

HJ15 求int型正整数在内存中存储时1的个数

求int型正整数在内存中存储时1的个数_牛客题霸_牛客网

题目分析

C++中,可以通过不断地将数字右移并检查最低位是否为1来实现这一点。下面是一个简单的解决方案:

#include <iostream>
using namespace std;int countOnes(int n) {int count = 0;while (n) {count += n & 1; // 检查最低位是否为1n >>= 1; // 右移一位}return count;
}int main() {int n;cin >> n; // 读取输入的整数cout << countOnes(n); // 输出1的个数return 0;
}

我的题解

通过减去最大的2的幂次方数,逐步减少数字,直到数字变为0,从而计算1的数量。

#include <iostream>
#include <cmath>int numsofone(int& num) {if (num == 0) return 0;int result = 1, i = 0;while (pow(2, i) != num) {i++;if (std::pow(2, i) > num) {result ++;num = num - pow(2, (i - 1));i = 0;}}return result;}int main() {int num = 0;std::cin >> num;std::cout << numsofone(num) << std::endl;return 0;}

HJ17 坐标移动

题目分析

  1. 解析输入字符串:使用std::istringstreamstd::getline()读取以分号(;)分隔的命令。
  2. 处理每个命令:对于每个命令,检查其是否有效(即以ASWD开头,后跟一串数字)。
  3. 更新坐标:根据命令更新当前坐标。
  4. 输出最终坐标
#include <iostream>
#include <sstream>
#include <string>
#include <regex>int main() {std::string input;std::getline(std::cin, input); // 读取整行输入std::istringstream ss(input);std::string command;int x = 0, y = 0; // 初始坐标// 用正则表达式匹配有效命令:字母(A、S、W、D) + 数字std::regex validCommandPattern(R"([ASWD]\d+)");while (std::getline(ss, command, ';')) {if (std::regex_match(command, validCommandPattern)) {char direction = command[0];int steps = std::stoi(command.substr(1));switch (direction) {case 'A': // 向左移动x -= steps;break;case 'D': // 向右移动x += steps;break;case 'W': // 向上移动y += steps;break;case 'S': // 向下移动y -= steps;break;}}}std::cout << x << "," << y << std::endl; // 输出最终坐标return 0;
}

我的题解

不用正则

#include <iostream>
#include <string>
#include <vector>int main() {int x = 0, y = 0, num = 0;std::string line, temp;std::vector<std::string> vec;std::getline(std::cin, line);for (int i = 0; i < line.size(); i++) {if (line[i] != ';') {temp.push_back(line[i]);}else{vec.push_back(temp);temp.clear();}}for (std::string i : vec) {bool isnum = true;if (i.size() <= 1 | i.size() > 3) continue;if (i[0] == 'A' ||i[0] == 'W' ||i[0] == 'S' ||i[0] == 'D') {std::string sub = i.substr(1);for (auto i : sub) {if (i < '0' || i > '9') isnum = false;}if (!isnum) continue;num = std::stoi(sub);if (num > 0 && num <= 99) {if (i[0] == 'A') x -= num;else if (i[0] == 'W') y += num;else if (i[0] == 'S') y -= num;else if (i[0] == 'D') x += num;}}}std::cout << x << ',' << y << std::endl;}

这篇关于HJ14 字符串排序HJ15 求int型正整数在内存中存储时1的个数HJ17 坐标移动的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/847071

相关文章

Java循环创建对象内存溢出的解决方法

《Java循环创建对象内存溢出的解决方法》在Java中,如果在循环中不当地创建大量对象而不及时释放内存,很容易导致内存溢出(OutOfMemoryError),所以本文给大家介绍了Java循环创建对象... 目录问题1. 解决方案2. 示例代码2.1 原始版本(可能导致内存溢出)2.2 修改后的版本问题在

大数据小内存排序问题如何巧妙解决

《大数据小内存排序问题如何巧妙解决》文章介绍了大数据小内存排序的三种方法:数据库排序、分治法和位图法,数据库排序简单但速度慢,对设备要求高;分治法高效但实现复杂;位图法可读性差,但存储空间受限... 目录三种方法:方法概要数据库排序(http://www.chinasem.cn对数据库设备要求较高)分治法(常

Redis多种内存淘汰策略及配置技巧分享

《Redis多种内存淘汰策略及配置技巧分享》本文介绍了Redis内存满时的淘汰机制,包括内存淘汰机制的概念,Redis提供的8种淘汰策略(如noeviction、volatile-lru等)及其适用场... 目录前言一、什么是 Redis 的内存淘汰机制?二、Redis 内存淘汰策略1. pythonnoe

使用MongoDB进行数据存储的操作流程

《使用MongoDB进行数据存储的操作流程》在现代应用开发中,数据存储是一个至关重要的部分,随着数据量的增大和复杂性的增加,传统的关系型数据库有时难以应对高并发和大数据量的处理需求,MongoDB作为... 目录什么是MongoDB?MongoDB的优势使用MongoDB进行数据存储1. 安装MongoDB

Java内存泄漏问题的排查、优化与最佳实践

《Java内存泄漏问题的排查、优化与最佳实践》在Java开发中,内存泄漏是一个常见且令人头疼的问题,内存泄漏指的是程序在运行过程中,已经不再使用的对象没有被及时释放,从而导致内存占用不断增加,最终... 目录引言1. 什么是内存泄漏?常见的内存泄漏情况2. 如何排查 Java 中的内存泄漏?2.1 使用 J

Java 字符数组转字符串的常用方法

《Java字符数组转字符串的常用方法》文章总结了在Java中将字符数组转换为字符串的几种常用方法,包括使用String构造函数、String.valueOf()方法、StringBuilder以及A... 目录1. 使用String构造函数1.1 基本转换方法1.2 注意事项2. 使用String.valu

Python中lambda排序的六种方法

《Python中lambda排序的六种方法》本文主要介绍了Python中使用lambda函数进行排序的六种方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们... 目录1.对单个变量进行排序2. 对多个变量进行排序3. 降序排列4. 单独降序1.对单个变量进行排序

python修改字符串值的三种方法

《python修改字符串值的三种方法》本文主要介绍了python修改字符串值的三种方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学... 目录第一种方法:第二种方法:第三种方法:在python中,字符串对象是不可变类型,所以我们没办法直接

JAVA中整型数组、字符串数组、整型数和字符串 的创建与转换的方法

《JAVA中整型数组、字符串数组、整型数和字符串的创建与转换的方法》本文介绍了Java中字符串、字符数组和整型数组的创建方法,以及它们之间的转换方法,还详细讲解了字符串中的一些常用方法,如index... 目录一、字符串、字符数组和整型数组的创建1、字符串的创建方法1.1 通过引用字符数组来创建字符串1.2

关于Java内存访问重排序的研究

《关于Java内存访问重排序的研究》文章主要介绍了重排序现象及其在多线程编程中的影响,包括内存可见性问题和Java内存模型中对重排序的规则... 目录什么是重排序重排序图解重排序实验as-if-serial语义内存访问重排序与内存可见性内存访问重排序与Java内存模型重排序示意表内存屏障内存屏障示意表Int