题目:求固定集合元素组成序列的下一个。
分析:简单题、排序。从后向前找到第一个增序对ab,前面不变、剩余重新组合。把后面比a大的最小元素与a交换,后面按递增排序即可。
#include <stdio.h> #include <stdlib.h> #include <string.h> int cmp( const void*a, const void* b ) { return *((char*)a) - *((char*)b); } int main() { char c='z',data[55],temp; while ( scanf("%s",data) && strcmp(data,"#") ) { int len = strlen(data)-1; int end = len; while ( len > 0 && data[len] <= data[len-1] ) len --; if ( len <= 0 ) printf("No Successor\n"); else { for ( int i = end ; i >= len ; -- i ) if ( data[i] > data[len-1] ) { temp = data[len-1]; data[len-1] = data[i]; data[i] = temp; break; } qsort(&data[len],end-len+1,sizeof(char),cmp); printf("%s\n",data); } } return 0; }
数据:
abaacb cbbaa a cab abcd acbb azyxwvutsrqpppooonnnmmmlllkkkjjjiiihhhgfedcccbbaaa #