C++-PTA 求解按“最多排序”到“最小排序”的顺序排列问题。

2024-01-10 12:32

本文主要是介绍C++-PTA 求解按“最多排序”到“最小排序”的顺序排列问题。,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

  • 一、题目
  • 二、算法思路
  • 三、代码

一、题目

在这里插入图片描述
在这里插入图片描述

二、算法思路

这道题目光从题目看起来很复杂,实际上我们可以使用函数将一个问题分解成两个问题来解决。
题目要求的是先对每一行的字符串求解对应的度量值,然后将字符串按度量值从小到大的顺序进行排序

第一个问题就是如何求解度量值,比较容易发现规律的是DAABEC度量值为5这个例子。
计算度量值的方法如下:

  1. 字母D:从D之后有四个字母AABC都小于D,所以这个字母的度量值为4
  2. 字母A:因为A是26个字母中最小的,所以从字母A之后的字符没有更小的了,其度量值为0
  3. 字母A度量值为0
  4. 字母B:字母B仅大于A,而从该字母之后没有A了,所以度量值为0
  5. 字母E:E大于C,所以度量值为1
  6. 字母C:由于C位于末尾,右侧没有更小的了,度量值为0
    最后就是将步骤1-6每个字母的度量值进行相加,所以DAABEC的度量值就为5了

然后就是设计一个结构体,存储DNA序列和对应的度量值。
如果你不清楚结构体的知识,可以到C 结构体 | 菜鸟教程中查看,定义结构体的方法不止下面一种。

struct letter
{string dna;//DNA序列int len=0;//度量值
};

因为DNA序列不止一个,所以在定义的时候就需要定义成结构体数组。

letter xulie[102];//结构体数组

先创建一个函数,用于计算一个字符串的度量值并返回度量值。
字母a-z对应的ASCII码是65-90,而字母A-Z对应的ASCII码是97-122
我们对字符进行int类型转换就可以直接转换成对应的ascii码了。

int check_len(string dna,int n)//计算字符串对应的度量值
{int len = 0;int i,j;for(i=0;i<n;i++)//遍历整个字符串{for(j=i;j<n;j++)//遍历从i之后的字符串{if((int)dna[i]>(int)dna[j])//若ascii越大,即字母较大时{len++;}}}return len;
}

对每一个dna序列计算度量值

for(i=1;i<=m;i++)//计算度量值xulie[i].len = check_len(xulie[i].dna,n);

判断完所有dna序列的度量值后,就可以进行冒泡递增排序。
排序完毕后就可以按顺序输出所有的dna序列了。

for(i=1;i<=m;i++)//根据度量值进行递增排序{for(j=1;j<m;j++)//字符串数组尾部不需要排序{if(xulie[j].len>xulie[j+1].len)//当前的度量值大于后者时{//dna序列替换string tmp_dna = xulie[j].dna;xulie[j].dna = xulie[j+1].dna;xulie[j+1].dna = tmp_dna;//度量值替换int tmp = xulie[j].len;xulie[j].len = xulie[j+1].len;xulie[j+1].len = tmp;}}}

三、代码

在这里插入图片描述

//作者:小狐狸
#include<iostream>
using namespace std;
struct letter
{string dna;//DNA序列int len=0;//度量值
};
int check_len(string dna,int n)//计算字符串对应的度量值
{int len = 0;int i,j;for(i=0;i<n;i++)//遍历整个字符串{for(j=i;j<n;j++)//遍历从i之后的字符串{if((int)dna[i]>(int)dna[j])//若ascii越大,即字母较大时{len++;}}}return len;
}
int main()
{int n;//字符串长度int m;//字符串个数int i,j;cin>>n>>m;letter xulie[102];//结构体数组for(i=1;i<=m;i++)//输入cin>>xulie[i].dna;for(i=1;i<=m;i++)//计算度量值xulie[i].len = check_len(xulie[i].dna,n);for(i=1;i<=m;i++)//根据度量值进行递增排序{for(j=1;j<m;j++)//字符串数组尾部不需要排序{if(xulie[j].len>xulie[j+1].len)//当前的度量值大于后者时{//dna序列替换string tmp_dna = xulie[j].dna;xulie[j].dna = xulie[j+1].dna;xulie[j+1].dna = tmp_dna;//度量值替换int tmp = xulie[j].len;xulie[j].len = xulie[j+1].len;xulie[j+1].len = tmp;}}}for(i=1;i<=m;i++)//输出cout<<xulie[i].dna<<endl;return 0;
}

这篇关于C++-PTA 求解按“最多排序”到“最小排序”的顺序排列问题。的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

Redis连接失败:客户端IP不在白名单中的问题分析与解决方案

《Redis连接失败:客户端IP不在白名单中的问题分析与解决方案》在现代分布式系统中,Redis作为一种高性能的内存数据库,被广泛应用于缓存、消息队列、会话存储等场景,然而,在实际使用过程中,我们可能... 目录一、问题背景二、错误分析1. 错误信息解读2. 根本原因三、解决方案1. 将客户端IP添加到Re

详谈redis跟数据库的数据同步问题

《详谈redis跟数据库的数据同步问题》文章讨论了在Redis和数据库数据一致性问题上的解决方案,主要比较了先更新Redis缓存再更新数据库和先更新数据库再更新Redis缓存两种方案,文章指出,删除R... 目录一、Redis 数据库数据一致性的解决方案1.1、更新Redis缓存、删除Redis缓存的区别二

oracle数据库索引失效的问题及解决

《oracle数据库索引失效的问题及解决》本文总结了在Oracle数据库中索引失效的一些常见场景,包括使用isnull、isnotnull、!=、、、函数处理、like前置%查询以及范围索引和等值索引... 目录oracle数据库索引失效问题场景环境索引失效情况及验证结论一结论二结论三结论四结论五总结ora

深入理解C++ 空类大小

《深入理解C++空类大小》本文主要介绍了C++空类大小,规定空类大小为1字节,主要是为了保证对象的唯一性和可区分性,满足数组元素地址连续的要求,下面就来了解一下... 目录1. 保证对象的唯一性和可区分性2. 满足数组元素地址连续的要求3. 与C++的对象模型和内存管理机制相适配查看类对象内存在C++中,规

element-ui下拉输入框+resetFields无法回显的问题解决

《element-ui下拉输入框+resetFields无法回显的问题解决》本文主要介绍了在使用ElementUI的下拉输入框时,点击重置按钮后输入框无法回显数据的问题,具有一定的参考价值,感兴趣的... 目录描述原因问题重现解决方案方法一方法二总结描述第一次进入页面,不做任何操作,点击重置按钮,再进行下

解决mybatis-plus-boot-starter与mybatis-spring-boot-starter的错误问题

《解决mybatis-plus-boot-starter与mybatis-spring-boot-starter的错误问题》本文主要讲述了在使用MyBatis和MyBatis-Plus时遇到的绑定异常... 目录myBATis-plus-boot-starpythonter与mybatis-spring-b

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

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

mysql主从及遇到的问题解决

《mysql主从及遇到的问题解决》本文详细介绍了如何使用Docker配置MySQL主从复制,首先创建了两个文件夹并分别配置了`my.cnf`文件,通过执行脚本启动容器并配置好主从关系,文中还提到了一些... 目录mysql主从及遇到问题解决遇到的问题说明总结mysql主从及遇到问题解决1.基于mysql

如何测试计算机的内存是否存在问题? 判断电脑内存故障的多种方法

《如何测试计算机的内存是否存在问题?判断电脑内存故障的多种方法》内存是电脑中非常重要的组件之一,如果内存出现故障,可能会导致电脑出现各种问题,如蓝屏、死机、程序崩溃等,如何判断内存是否出现故障呢?下... 如果你的电脑是崩溃、冻结还是不稳定,那么它的内存可能有问题。要进行检查,你可以使用Windows 11

如何安装HWE内核? Ubuntu安装hwe内核解决硬件太新的问题

《如何安装HWE内核?Ubuntu安装hwe内核解决硬件太新的问题》今天的主角就是hwe内核(hardwareenablementkernel),一般安装的Ubuntu都是初始内核,不能很好地支... 对于追求系统稳定性,又想充分利用最新硬件特性的 Ubuntu 用户来说,HWEXBQgUbdlna(Har