题目:DNA序列排序

DNA序列由一序列的大写英文字母表示,如ABCDEF。紊乱程度表示组成DNA序列的字母按照由小到大的顺序进行排列程度,如ABC的紊乱程度比ACB小,因为它字母都是由小到大排序的。紊乱程度计算如下,以DNA序列DCEFB为例:DCEFB的紊乱程度为5,其中字母D右边的序列有2个小于它的字母C和B,字母C有1个小于它的字母B,同理,字母E和F分别有1个排序小于它的字母,紊乱程度=2+1+1+1=5。紊乱程度越大,排序越乱。

程序输入:

第1行输入m和n,其中m表示每一个DNA序列的长度,n表示一共有多少个DNA序列;第2到n行输入DNA序列,每一个DNA序列的长度都为m。m的取值范围为1-100,即DNA序列的长度不超过100,n的范围为1-50,表示最多有50个DNA序列。

结果输出:

按照DNA的紊乱程度由小到大进行排序,如果两个DNA序列的紊乱程度相同,则按照输入的顺序进行排序。

程序设计—(时间16ms,占用空间200k):

 #include <iostream>
#include <string> using namespace std; void qsort(int startIndex,int EndIndex,int *vector,string *values){
int start=startIndex;
int end=EndIndex;
int currentValue = *(vector+start);
string currentStr = *(values+start);
while(start<end){
while(start<end&&*(vector+end)>=currentValue){
end--;
}
*(vector+start)=*(vector+end);
*(values+start)=*(values+end);
while(start<end&&*(vector+start)<=currentValue){
start++;
}
*(vector+end)=*(vector+start);
*(values+end)=*(values+start);
}
*(vector+end)=currentValue;
*(values+end)=currentStr;
if(end->startIndex){
qsort(startIndex,end-,vector,values);
}
if(end+<EndIndex)
{
qsort(end+,EndIndex,vector,values);
}
} int main()
{
char line[];
string str;
int *numOfLines=new int[];
int index=;
int *values=new int[];
string *allStr=new string();
int totalLine=;
int leterNum=;
cin>>leterNum>>totalLine;
numOfLines = new int[totalLine];
allStr = new string[totalLine];
values = new int[leterNum];
while (index<totalLine)
{
cin>>line;
str = line;
*(allStr+index)=line;
int count=;
for(int i=;i<leterNum;i++){
int l = line[i]-'A';
*(values+i)=l;
for(int j=i-;j>=;j--){
if(*(values+j)>*(values+i)){
count++;
}
}
}
(*(numOfLines+index))=count;
index++;
}
qsort(,totalLine-,numOfLines,allStr);
for(int i=;i<totalLine;i++){
cout<<*(allStr+i)<<endl;
}
return ;
}

1007是简单题,主要考察一些小细节,有几个需要注意的地方:

1)数组和指针的问题(由于本人刚刚接触C++,在指针上确实花了一些时间)

数组的指针可以表示第一个元素的位置,然后通过++可以得到其他元素的指针。

如:int *pointer = new int[10];

新建一个10个元素的数组,pointer指向该数组第一个元素的地址,pointer++表示数组第二个元素的地址,pointer+i表示数组第pointer+i个元素。

2)第二个是输入的问题

弄清楚几个输入的关键方法:

>>、getLine、gets、get_s、fget

ACM1007的更多相关文章

  1. 杭电ACM1007

    Quoit Design Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Tot ...

  2. C# ACM poj1007

    求逆序数,快排 public static void acm1007(int a, string[] c) { Dictionary<int, string> dic = new Dict ...

随机推荐

  1. canvas绘制时钟及注释及save和restore的用法

    <!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...

  2. xftp上传失败之解决办法

    修改/usr/local 文件夹权限 rwx 为不可读不可写第三方不可访问 报错 传输状态 恢复文件夹/usr/local 读写第三方访问权限 成功上传

  3. Vue中,父组件向子组件传值

    1:在src/components/child/文件夹下,创建一个名为:child.vue的子组件 2:在父组件中,设置好需要传递的数据 3:在App.vue中引入并注册子组件 4:通过v-bind属 ...

  4. POI导出多张图片到Excel

    package com.sun.office.excel; import java.awt.image.BufferedImage; import java.io.ByteArrayOutputStr ...

  5. sql sever基本语法总结

    一.数据库导入表 1.先用sql语句创建相应的表,包括表的字段和字段类型 2.导入数据,选择相应的表名,不带'$'符号的表名 二.创建数据库 create datatable 数据库名 三.查看表里的 ...

  6. iOS通知传值的使用

    通知 是在跳转控制器之间常用的传值代理方式,除了代理模式,通知更方便.便捷,一个简单的Demo实现通知的跳转传值. 输入所要发送的信息 ,同时将label的值通过button方法调用传递, - (IB ...

  7. python学习:使用正则收集ip信息

        使用正则表达式收集主机信息        #!/usr/bin/env python   from subprocess import Popen, PIPE import re def ge ...

  8. 使用netstat检测及监测网络连接

    在讲监测检测之前,先给大家在普及一个知识,那就是TCP连接的状态,TCP进行3次握手,其过程有很多状态,不同的连接状态,都有想对应的状态码,看下面列表: LISTEN:侦听来自远方的TCP端口的连接请 ...

  9. ASP.NET Core的身份认证框架IdentityServer4--(4)添加第三方快捷登录

    添加对外部认证的支持 接下来我们将添加对外部认证的支持.这非常简单,因为你真正需要的是一个兼容ASP.NET Core的认证处理程序. ASP.NET Core本身也支持Google,Facebook ...

  10. Xen的虚拟化详解

    最近在看Xen在2003年发表在sosp上的论文<Xen and the Art of Virtualization>,中途遇到一些不理解的技术点,在网络上查找相关资料,发现大多数人都只是 ...