第一个问题:
有红球4个,白球3个,黄球3个,将它们排成一排共有多少种排法
#include <stdio.h> int BallsIUsed[201]; int BallsIHave[201]={0}; int total=0; int k; void op() { int i; total++; printf("%d:",total); for(i=1;i<=k;i++) { printf("%c",BallsIUsed[i]); } printf(" "); } void search(int n) { // printf("wow! "); int i; for(i=33;i<=127;i++) { // printf("wow!%d ",i); if(BallsIHave[i]!=0) { BallsIUsed[n]=i; BallsIHave[i]--; if(n==k) op(); else search(n+1); BallsIUsed[n]=0; BallsIHave[i]++; } } } int main() { char c; int b; scanf("%d",&k); getchar(); b=k; while(b--) { scanf("%c",&c); BallsIHave[c]++; } search(1); return 0; }
没有用交换,强行框架