排列组合题可用穷举方法
//两个乒乓球队进行比赛, 各出3人。甲队为A, B, C 3人,
//乙队为X, Y, Z3人。已抽签决定比赛名单。有人向队员打听比赛的名单, A说他不和X比,
//C说他不和X, Z比, 请编程序找出3对赛手的名单。
//穷举
void match()
{
for(char a='X';a<='Z';a++)
for(char b='X';b<='Z';b++)
for (char c = 'X'; c <= 'Z'; c++)
{
if (a != 'X' && c != 'X' && c != 'Z'&&a!=b&&a!=c&&c!=b)
{
printf("A->%c,B->%c,C->%c", a, b, c);
}
}
}
//在一个陌生的国度,有5种不同的硬币单位:15、23、29、41和67(分)。
//寻找所有组成18元8分(即1808分)的可能组合。 假定对于所有面值的硬币你都有足够的硬币。
int Fun()
{
int count = 0;
for (int i1 = 0; i1 < 1808 / 15; i1++)
{
for (int i2 = 0; i2 < 1808 / 23; i2++)
{
if (i1 * 15 + i2 * 23 > 1808)
{
continue;
}
for (int i3 = 0; i3 < 1808 / 29; i3++)
{
if (i1 * 15 + i2 * 23 + i3 * 29 > 1808)
{
continue;
}
for (int i4 = 0; i4 < 1808 / 41; i4++)
{
if (i1 * 15 + i2 * 23 + i3 * 29 + i4 * 41 > 1808)
{
continue;
}
for (int i5 = 0; i5 < 1808 / 67; i5++)
{
if (i1 * 15 + i2 * 23 + i3 * 29 + i4 * 41 + i5 * 67 == 1808)
count++;
else if (i1 * 15 + i2 * 23 + i3 * 29 + i4 * 41 + i5 * 67 > 1808)
{
continue;
}
}
}
}
}
}
return count;
}
int main()
{
match();
}