思路:flip i操作是从第0个到倒数第i个数颠倒、即对调位置。题目是要求将每组数据进行变换到升序的操作序列。思想是从后到前来排,先排最大的数字到其正确的位置,然后依次。所以,首先要将其排序,找出数字间的顺序关系。然后搜索要排的数字a在现在序列中的位置x,找到该位置后,肯定是进行此位置的flip操作,即flip x,将其变换到首位置,然后再进行一次flip y位置,将首位置的该数据放在y位置。(y假设是倒数y个数,即a应正确放的位置)
注意:对x需要判断是否为0,即是否已经在首位置,是的话就不用再变换到首位置这一步了。以及,在开始时,
Code:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<ctype.h>
#define N 100
int cmp_int(const void *_a, const void *_b);
int search(int* a, int n, int d);
void revs(int *a, int j);
char temps[N];
int a[N/2];
int b[N/2];
int main()
{
while(fgets(temps,N-1,stdin)!=NULL)
{
int len=strlen(temps);
char snum[5];
int n=0;
for(int i=0,j=0;i<len;++i)
{
if(isdigit(temps[i]))
{
snum[j++]=temps[i];