/*
一个排序问题求解
全班同学排成 6 排, A 、 B 、 C 、 D 、 E 、 F 等 6 人分别站在第 1 排到第 6 排 • 用 6 个 int 变量表示 A — F 的位置 –
A 不在第 1 排 a != 1
A 与 B 前后相邻 (a == b + 1) || (a == b - 1)
C 在 D 前面 c == d - 1
E 在 B 的前两排 e == b - 2
C 在 F 后的第 4 排 c == f + 4
怎么让输出结果是f e a b c d 啊
因我不想用索引,故把'F ' 代替 'f'
*/
#include<stdio.h>
char A[6];
char a[6]={'a','b','c','d','e','F'};
int isok(int n)//分析A[]第N个数与前面的数比较为递归 作准备。
{
int flag=1,i;
if(A[0]=='a') flag=0;
for(i=0;i<n;i++){
if(A[n]==A[i]) flag=0;//不与前面已选择的数相同
}
if(A[n]=='a' && A[n-1]=='b') flag=1;
if(A[n]=='b' && A[n-1]=='a' ) flag=1;
if(A[n]=='d' && A[n-1]!='c' ) flag=0;
if(A[n]=='b' && A[n-2]!='e' ) flag=0;
if(A[n]=='c' && A[n-4]!='F' ) flag=0;
return flag;
}
void output()
{
int i;
for(i=0; i<6;i++)
printf("%2c",A[i]);
printf("\n");
}
void ok(int n)
{
int j;
if(n==6)
{
output();
return ;
}
for(j=0;j<6;j++)
{
A[n]=a[j];
if(isok(n) ) ok(n+1);
}
}
int main()
{
ok(0);
return 0;
}
好程序值得继续讨论学习。
一个排序问题求解
全班同学排成6排,A、B、C、D、E、F等6人分别站在第1排到第6排·用
A不在第1排aa=1
A与B前后相邻(a==b+1)(a==b-1)
C在D前面c==d-1
E在B的前两排
C在F后的第4排c==f+4
怎么让输出结果是 fea bcd啊