写了个递归的, 又学到了不少 九九同学的交换宏 xzlxzlxzl同学的不要轻易使用全局变量和在函数里定义静态变量
程序代码:
#include<stdio.h> #include<string.h> #define SWAP(x,y,n,a){char temp=0;temp=str[x];str[x]=str[y];str[y]=temp;n++;printf("%d:%s\n",n,a);}//定义交换宏 char t; int n=0; char str[11]="wrbbrwwrbr"; int fun(char str[], int b, int w, int r) { int i; if(w == r) //如果过w和r索引下标相等,结束 { return 0; } for(i = 0; i < r-1; i++) { if(str[w+i] == 'b' && (str[b]=='b')) //如果(w)找到的蓝色和准备要交换的(b)位置上(蓝色)一样 { fun(str, b+1, w, r); //b的下标加1 break; } else if(str[w+i]=='r' && (str[r] == 'r')) //如果(w)找到的红色和准备要交换的(r)位置上(红色)一样 { fun(str,b,w,r-1); //r的下标加1 break; } else if(str[w+i] == 'b') //如果找到蓝色了 { SWAP(w+i,b,n,str); //交换 fun(str,b+1,w+1,r); //b, w下标加1 break; } else if(str[w+i] == 'r') //如果找到红色了 { SWAP(w+i,r,n,str); //交换 fun(str, b, w+1, r-1); //w加1, r减1 break; } else if(str[w+i] == 'w') //如果找到白色 { fun(str,b,w+1,r); //w加1 break; } } } int main(void) { int b=0, w=0, r=strlen(str)-1; fun(str, b, w, r); printf("%d:%s",n+1, str); return 0; }
早知做人那么辛苦! 当初不应该下凡