Brian Warehouse

Some birds aren`t meant to be caged, their feathers are just too bright... ...
posts - 40, comments - 16, trackbacks - 0, articles - 1

POJ 1007 DNA sorting

Posted on 2010-08-17 14:12 Brian 阅读(239) 评论(0)  编辑 收藏 引用 所属分类: POJ
此程序耗费我尽3个小时之久,原因是做题前的规划没做好,一直没有想到整体排序的好办法,最后还是用了注意匹配的方法才解决了问题,我不知道为什么用冒泡不行,第一个字符串总是乱码。我觉得整体思路还是比较清晰的,只是方法可能有点傻,效率还行。
C 编译器 : 172K    0MS
POJ 1007 DNA sorting - Icho - Brian Warehouse#include <stdio.h>
POJ 1007 DNA sorting - Icho - Brian Warehouse#include 
<string.h>
POJ 1007 DNA sorting - Icho - Brian Warehouse
POJ 1007 DNA sorting - Icho - Brian Warehousetypedef 
struct DNA
POJ 1007 DNA sorting - Icho - Brian WarehousePOJ 1007 DNA sorting - Icho - Brian Warehouse
POJ 1007 DNA sorting - Icho - Brian Warehouse{
POJ 1007 DNA sorting - Icho - Brian Warehouse    
char str[50]; // 存储字符串
POJ 1007 DNA sorting - Icho - Brian Warehouse
    int count[2]; // [0] [1]都存放串的逆序数 
POJ 1007 DNA sorting - Icho - Brian Warehouse
}
DNA;              // [1]中作为参考,用来和排序后的[0]匹配
POJ 1007 DNA sorting - Icho - Brian Warehouse

POJ 1007 DNA sorting - Icho - Brian Warehouse
int main()
POJ 1007 DNA sorting - Icho - Brian WarehousePOJ 1007 DNA sorting - Icho - Brian Warehouse
POJ 1007 DNA sorting - Icho - Brian Warehouse{
POJ 1007 DNA sorting - Icho - Brian Warehouse    
int i=0,j,k=0,n,m,temp;
POJ 1007 DNA sorting - Icho - Brian Warehouse    DNA or[
100];
POJ 1007 DNA sorting - Icho - Brian Warehouse    scanf(
"%d%d",&n,&m);
POJ 1007 DNA sorting - Icho - Brian Warehouse    
POJ 1007 DNA sorting - Icho - Brian Warehouse    
while (k<m) //获得数据并求各自逆序数
POJ 1007 DNA sorting - Icho - Brian WarehousePOJ 1007 DNA sorting - Icho - Brian Warehouse
    POJ 1007 DNA sorting - Icho - Brian Warehouse{
POJ 1007 DNA sorting - Icho - Brian Warehouse        scanf(
"%s",&or[k].str);
POJ 1007 DNA sorting - Icho - Brian Warehouse        or[k].count[
0]=0// 此步不能忘
POJ 1007 DNA sorting - Icho - Brian Warehouse
        for (i=0; i<n; i++)
POJ 1007 DNA sorting - Icho - Brian Warehouse            
for (j=i+1; j<n; j++)
POJ 1007 DNA sorting - Icho - Brian Warehouse                
if (or[k].str[i] > or[k].str[j])
POJ 1007 DNA sorting - Icho - Brian Warehouse                    or[k].count[
0]++;
POJ 1007 DNA sorting - Icho - Brian Warehouse        k
++;
POJ 1007 DNA sorting - Icho - Brian Warehouse    }

POJ 1007 DNA sorting - Icho - Brian Warehouse    
POJ 1007 DNA sorting - Icho - Brian Warehouse    
for (i=0; i<m; i++)
POJ 1007 DNA sorting - Icho - Brian Warehouse        or[i].count[
1]=or[i].count[0]; // 原逆序数存放顺序
POJ 1007 DNA sorting - Icho - Brian Warehouse

POJ 1007 DNA sorting - Icho - Brian Warehouse    
for (i=1; i<m; i++// 对于各组串的逆序数进行排序,count[0]内容已打乱
POJ 1007 DNA sorting - Icho - Brian WarehousePOJ 1007 DNA sorting - Icho - Brian Warehouse
    POJ 1007 DNA sorting - Icho - Brian Warehouse{
POJ 1007 DNA sorting - Icho - Brian Warehouse        k
=i-1;
POJ 1007 DNA sorting - Icho - Brian Warehouse        
for (j=i; j<m; j++)
POJ 1007 DNA sorting - Icho - Brian Warehouse            
if (or[j].count[0< or[k].count[0])
POJ 1007 DNA sorting - Icho - Brian Warehouse                k
=j;
POJ 1007 DNA sorting - Icho - Brian Warehouse        
POJ 1007 DNA sorting - Icho - Brian Warehouse        temp
=or[i-1].count[0];
POJ 1007 DNA sorting - Icho - Brian Warehouse        or[i
-1].count[0]=or[k].count[0];
POJ 1007 DNA sorting - Icho - Brian Warehouse        or[k].count[
0]=temp;
POJ 1007 DNA sorting - Icho - Brian Warehouse    }
                // 这是典型的选择排序,只是对[0]单元的处理,稳定与否没关系
POJ 1007 DNA sorting - Icho - Brian Warehouse
  
POJ 1007 DNA sorting - Icho - Brian Warehouse
POJ 1007 DNA sorting - Icho - Brian Warehouse    
for (i=0; i<m; i++)
POJ 1007 DNA sorting - Icho - Brian Warehouse        
for (j=0; j<m; j++)
POJ 1007 DNA sorting - Icho - Brian Warehouse            
if (or[i].count[0== or[j].count[1]) // [0] 和 [1] 中逐一相比较
POJ 1007 DNA sorting - Icho - Brian WarehousePOJ 1007 DNA sorting - Icho - Brian Warehouse
            POJ 1007 DNA sorting - Icho - Brian Warehouse{
POJ 1007 DNA sorting - Icho - Brian Warehouse                or[j].count[
1]=-1// 此步是相等时顺序不变的保证,相当于做了访问标记!
POJ 1007 DNA sorting - Icho - Brian Warehouse
                printf("%s\n",or[j].str);
POJ 1007 DNA sorting - Icho - Brian Warehouse            }

POJ 1007 DNA sorting - Icho - Brian Warehouse
POJ 1007 DNA sorting - Icho - Brian Warehouse    
return 0;
POJ 1007 DNA sorting - Icho - Brian Warehouse}

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理