POJ 1007
来源:互联网 发布:apache主目录配置文件 编辑:程序博客网 时间:2024/06/07 05:24
原题网址:http://poj.org/problem?id=1007
题目大意:
输入n,m
m代表一共有m个字符串,n代表每个字符串含有n个字符。要求将这m个字符串按其逆序数从小到大排序,逆序数相同的字符串按其输入先后顺序排序。
比如DAABEC的逆序数是5,因为D大于后面的2个A 1个B 1个C,E大于后面的1个C,所以逆序数=2+1+1+1=5.
我的解题思路:
①用结构体存放所有数据
typedef struct{
char str[MAX];//MAX=110
int num;//每个字符串的逆序数
int sno;//每个字符串的序号
}DNA
DNA dna[MAX];
②利用qsort()快排,先按逆序数不同的从小到大排,如果逆序数相等则按每个字符串的序号从小到大排
源码如下:
#include <stdio.h>#include <stdlib.h>#include <string.h>#define MAX 110typedef struct{ char str[MAX]; int num;//每个字符串的逆序数 int sno;//每个字符串的序号}DNA;DNA dna[MAX];int compare(const void *a,const void *b){ DNA c=*(DNA *)a; DNA d=*(DNA *)b; if(c.num!=d.num) { return c.num-d.num; } else { return c.sno-d.sno; }}int main(){ int n,m;//n代表每个字符串的长度,m代表一共有m个字符串 int i; int j; int k; int sum; while(scanf("%d%d",&n,&m)!=EOF) { for(i=0;i<m;i++) { getchar(); sum=0; for(j=0;j<n;j++) { scanf("%c",&dna[i].str[j]); } for(j=0;j<n;j++) { for(k=j;k<n;k++) { if(dna[i].str[j]>dna[i].str[k]) { sum++; } } } dna[i].num=sum; dna[i].sno=i; } qsort(dna,m,sizeof(dna[0]),compare); for(i=0;i<m;i++) { puts(dna[i].str); } } return 0;}
0 0
- POJ 1007
- poj 1007
- poj 1007
- POJ 1007
- POJ 1007
- poj 1007
- POJ-1007
- POJ 1007
- poj 1007
- POJ 1007
- POJ-1007
- poj-1007
- POJ 1007
- poj 1007
- POJ 1007
- POJ 1007
- poj 1007
- POJ 1007
- 建立嵌入式gdb调试环境
- ios 实现推送消息
- android 4.4 shareactionprovider小结
- WTL在Win8.1系统WM_DROPFILES无法响应的解决办法
- IO系统性能之一:衡量性能的几个指标
- POJ 1007
- redhat图形界面启动后出现桌面但是没有登录界面解决办法
- leetcode-Single Number II
- PAT_1008
- 插值算法
- miniui 选择器
- android 项目框架和资源
- 判断一个字符串是否为回文
- hibernate load 和get