主要输入字符串,以字符串的逆叙述排序,题目出自poj1007。
源代码如下:
#include <iostream>
#include <string>
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
using namespace std;
int calcnum(char * s,int column);
int main() {
int column,line;
int i,j,k,l;
int a[100];
char s[100][100];
char * temp=new char[100];
cin>>column>>line;
for(i=0;i<line;i++){
for(j=0;j<column;j++){
cin>>s[i][j];
}
}
for(i=0;i<line;i++){
a[i]=calcnum(s[i],column);
}
for(i=0;i<line-1;i++){ //据逆序数排序(DESC)
k=i;
for(j=i+1;j<=line-1;j++){
if(a[k]>a[j]){
k=j;
}
}
if(k!=i){
strcpy(temp,s[i]);strcpy(s[i],s[k]);strcpy(s[k],temp);
l=a[i];a[i]=a[k];a[k]=l; //少这一句真是太坑爹了!
}
}
for(i=0;i<line;i++){
for(j=0;j<column;j++){
cout<<s[i][j];
}
cout<<endl;
}
delete temp;
return 0;
}
int calcnum(char * s,int column){ //求逆序数;
int i,j;
int count=0;
for(i=0;i<column-1;i++){
switch(s[i]){
case 'A':break;
case 'C':
for(j=i+1;j<column;j++){
if(s[j]=='A'){
count++;
}
}
break;
case 'G':
for(j=i+1;j<column;j++){
if(s[j]=='A' || s[j]=='C'){
count++;
}
}
break;
case 'T':
for(j=i+1;j<column;j++){
if(s[j]=='A' || s[j]=='C' || s[j]=='G'){
count++;
}
}
break;
default:break;
}
}
return count;
}
本人小菜,以C++的格式编写了C的代码,排序完全可以用sort的,这些学过再改吧!