北大PKU在线测试1007

来源:互联网 发布:滴定分析实验数据 编辑:程序博客网 时间:2024/05/19 17:48

描述:在一个序列中,“unsortedness''的一个措施的数量例如,在字母”DAABEC这项措施5因为D大于其右侧四个字母,E大于右侧的一个字母这项措施被称为序列中反转的数目序列``AACEDGG只有一个反转E和D,序列``ZWQM''有6倒。你负责编目序列的NA序列只包含四个字母A,C,G,T)但是,您要列出他们的最多反转和最少反转,而不是按字母顺序排列。所有的字符串具有相同的长度

输入:第一行包含两个整数一个正整数n(0<</SPAN>=50上)是字符串的长度,另一个正整数m(0<</SPAN>=100),是输入字符串的个数。接下来输入m行字符串,每行字符串长度为n

输出:输出输入字符串列表,计算每个串的反转数目。从小到大排列然后输出秩序。

翻译的实在蛋疼,我的英文水平太烂。其实就是求每个串的逆序数,然后从小到大输出。不懂的话看程序吧!
代码:
 

#include<iostream>
#include<string>
using namespace std;
int main(){
 int n,m,i,j,k;
 string tem;
 cin>>n>>m;
 if(m<=0||m>100||n<=0||n>50)
       return 0;
 string *first=new string[m];
 int *fir=new int[m];
 for(i=0;i<m;i++)
  fir[i]=0;
 for(i=0;i<m;i++)
 cin>>first[i];
   for(i=0;i<m;i++){
       for(j=0;j<n-1;j++)
  for(k=j+1;k<n;k++)
   if(first[i][j]>first[i][k])
    fir[i]++;
 }
 for(i=0;i<m;i++){
       for(j=i+1;j<m;j++){
  if(fir[i]>fir[j]){
   tem=first[i];
   first[i]=first[j];
   first[j]=tem;
   k=fir[i];
   fir[i]=fir[j];
   fir[j]=k;
   }
  }
 cout<<first[i]<<endl;
 }
 return 0;
}

0 0