题目: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. BZOJ 2844: albus就是要第一个出场 [高斯消元XOR 线性基]

    2844: albus就是要第一个出场 题意:给定一个n个数的集合S和一个数x,求x在S的$2^n$个子集从小到大的异或和序列中最早出现的位置 一开始看错题了...人家要求的是x第一次出现位置不是第x ...

  2. JAVA 二进制基础

    主要内容 1.十进制二进制互转 2.二进制的位运算 3.JDK内置的进制转换 4.JAVA中的进制 十进制二进制互转 57 111001 二进制的位运算:优点:特定情况下,计算方便,被支持面广泛. ① ...

  3. chrome无法登陆账号,显示操作超时的解决方案

    起因 今天重装了下windows操作系统,准备登陆chrome浏览器,以同步各种插件(你懂的),结果是...无法登陆账号,显示操作超时,真是无语了. 碰到了这个问题第一个直觉是:FQ.突然想到如果修改 ...

  4. web攻击

    一.XSS(跨站脚本攻击) 最常见和基本的攻击WEB网站的方法.攻击者在网页上发布包含攻击性代码的数据.当浏览者看到此网页时,特定的脚本就会以浏览者用户的身份和权限来执行.通过XSS可以比较容易地修改 ...

  5. php与web页面交互(二)

    一.获取表单数据 1.1 使用POST()方法提交表单  ---POST()方法可以没有限制地传递数据到服务器,所提交的数据在后台传输,用户在浏览器端是看不到这一过程的,安全性高,适用于发送保密数据和 ...

  6. qt安装--this Qt version uses an unsupported makefile

    解决办法: Run regedit. Hop to HKEY_CURRENT_USER\Software\Trolltech\Versions或HKEY_CURRENT_USER\Software\D ...

  7. php读取文件内容的三种方法

    <?php //**************第一种读取方式***************************** 代码如下: header("content-type:text/h ...

  8. [Python Study Notes]字符串操作

    字符串操作 a.字符串格式化输出 name = "liu" print "i am %s " % name     #输出: i am liu   PS: 字符 ...

  9. javascript函数大全

    JavaScript函数大全 1.document.write(""); 输出语句2.JS中的注释为//3.传统的HTML文档顺序是:document->html->( ...

  10. ubuntu17 安装python3.6 pip

    安装python: wget https://www.python.org/ftp/python/3.6.3/Python-3.6.3.tgz .tgz cd Python- #安装编译依赖包 sud ...