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

相关文章

springboot循环依赖问题案例代码及解决办法

《springboot循环依赖问题案例代码及解决办法》在SpringBoot中,如果两个或多个Bean之间存在循环依赖(即BeanA依赖BeanB,而BeanB又依赖BeanA),会导致Spring的... 目录1. 什么是循环依赖?2. 循环依赖的场景案例3. 解决循环依赖的常见方法方法 1:使用 @La

SpringBoot启动报错的11个高频问题排查与解决终极指南

《SpringBoot启动报错的11个高频问题排查与解决终极指南》这篇文章主要为大家详细介绍了SpringBoot启动报错的11个高频问题的排查与解决,文中的示例代码讲解详细,感兴趣的小伙伴可以了解一... 目录1. 依赖冲突:NoSuchMethodError 的终极解法2. Bean注入失败:No qu

MySQL新增字段后Java实体未更新的潜在问题与解决方案

《MySQL新增字段后Java实体未更新的潜在问题与解决方案》在Java+MySQL的开发中,我们通常使用ORM框架来映射数据库表与Java对象,但有时候,数据库表结构变更(如新增字段)后,开发人员可... 目录引言1. 问题背景:数据库与 Java 实体不同步1.1 常见场景1.2 示例代码2. 不同操作

C++ 中的 if-constexpr语法和作用

《C++中的if-constexpr语法和作用》if-constexpr语法是C++17引入的新语法特性,也被称为常量if表达式或静态if(staticif),:本文主要介绍C++中的if-c... 目录1 if-constexpr 语法1.1 基本语法1.2 扩展说明1.2.1 条件表达式1.2.2 fa

如何解决mysql出现Incorrect string value for column ‘表项‘ at row 1错误问题

《如何解决mysql出现Incorrectstringvalueforcolumn‘表项‘atrow1错误问题》:本文主要介绍如何解决mysql出现Incorrectstringv... 目录mysql出现Incorrect string value for column ‘表项‘ at row 1错误报错

如何解决Spring MVC中响应乱码问题

《如何解决SpringMVC中响应乱码问题》:本文主要介绍如何解决SpringMVC中响应乱码问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Spring MVC最新响应中乱码解决方式以前的解决办法这是比较通用的一种方法总结Spring MVC最新响应中乱码解

pip无法安装osgeo失败的问题解决

《pip无法安装osgeo失败的问题解决》本文主要介绍了pip无法安装osgeo失败的问题解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一... 进入官方提供的扩展包下载网站寻找版本适配的whl文件注意:要选择cp(python版本)和你py

C++中::SHCreateDirectoryEx函数使用方法

《C++中::SHCreateDirectoryEx函数使用方法》::SHCreateDirectoryEx用于创建多级目录,类似于mkdir-p命令,本文主要介绍了C++中::SHCreateDir... 目录1. 函数原型与依赖项2. 基本使用示例示例 1:创建单层目录示例 2:创建多级目录3. 关键注

C++从序列容器中删除元素的四种方法

《C++从序列容器中删除元素的四种方法》删除元素的方法在序列容器和关联容器之间是非常不同的,在序列容器中,vector和string是最常用的,但这里也会介绍deque和list以供全面了解,尽管在一... 目录一、简介二、移除给定位置的元素三、移除与某个值相等的元素3.1、序列容器vector、deque

C++常见容器获取头元素的方法大全

《C++常见容器获取头元素的方法大全》在C++编程中,容器是存储和管理数据集合的重要工具,不同的容器提供了不同的接口来访问和操作其中的元素,获取容器的头元素(即第一个元素)是常见的操作之一,本文将详细... 目录一、std::vector二、std::list三、std::deque四、std::forwa