码农谷题目之将字符串中的字符按规则重新排列

来源:互联网 发布:美国基因检测 数据 编辑:程序博客网 时间:2024/05/17 05:16

码农谷坑爹的和以前OJ有点区别就是你不能while循环读取,只能一个进程做一题,因为这个就花了好长时间,以下是AC的C代码:

#include <stdio.h>#include <string.h>#define VALUE(p,i,v) \    if(p[i] >= 'A' && p[i] <= 'Z') \    { \        v = p[i] - 'A'; \    } \    else if(p[i] >= 'a' && p[i] <= 'z') \    { \        v = p[i] - 'a'; \    }#define IS_NORMAL(p,i) ((p[i] >= 'A' && p[i] <= 'Z') || (p[i] >= 'a' && p[i] <= 'z'))void sort(char* line){    short len = strlen(line);    char t1 = 0,t2 = 0;    short i,j,e,t3;    i = 0;    while(i < len && !IS_NORMAL(line,i)){ i ++; }    e = len - 1;    while(e >= 0 && !IS_NORMAL(line,e)){e --;}    for(;i <= e;i ++)    {        while(i <= e && !IS_NORMAL(line,i)){ i ++; }        for(j = e; j > i; j --)        {            while(j > i && !IS_NORMAL(line,j)){j --;}            VALUE(line,j,t1);            t3 = j - 1;            while(t3 > i && !IS_NORMAL(line,t3)){t3 --;}            VALUE(line,t3,t2);            if(t2 > t1)            {                t1 = line[j] ;                line[j] = line[t3];                line[t3] = t1 ;            }        }    }}int main(){    char szLine[1002] = {0};    gets(szLine);    sort(szLine);    puts(szLine);    return 0;}
1 0
原创粉丝点击