C 练习实例22
题目:两个乒乓球队进行比赛,各出三人,甲队为 a、b、c 三人,乙队为 x、y、z 三人。
抽签决定比赛名单,有人向队员打听比赛的名单:a 说他不和 x 比,c 说他不和 x、z 比,请编写代码找出三队赛手的名单。
思路:
- 使用 3 个循环 分别枚举甲队的每个队员与乙队的队员匹配的可能性。
- 添加 约束条件,过滤掉不满足题目要求的组合:
- a 不和 x 比赛。
- c 不和 x 和 z 比赛。
- 确保每个乙队的队员只能和一个甲队的队员比赛。
实例
// Created by www.runoob.com on 15/11/9.
// Copyright © 2015年 菜鸟教程. All rights reserved.
//
#include <stdio.h>
int main() {
// 定义甲队和乙队的成员
char teamA[] = {'a', 'b', 'c'}; // 甲队:a, b, c
char teamB[] = {'x', 'y', 'z'}; // 乙队:x, y, z
// 变量 i, j, k 分别表示 a, b, c 的对手
char i, j, k;
// 枚举 a 的对手
for (i = 'x'; i <= 'z'; i++) {
// 枚举 b 的对手
for (j = 'x'; j <= 'z'; j++) {
// 确保 a 和 b 的对手不同
if (i != j) {
// 枚举 c 的对手
for (k = 'x'; k <= 'z'; k++) {
// 确保 c 的对手与 a 和 b 的对手不同
if (i != k && j != k) {
// 满足题目条件:a 不和 x 比,c 不和 x 和 z 比
if (i != 'x' && k != 'x' && k != 'z') {
// 输出匹配结果
printf("比赛顺序:a--%c\tb--%c\tc--%c\n", i, j, k);
}
}
}
}
}
}
return 0;
}
以上实例输出结果为:
顺序为:a--z b--x c--y
C 语言经典100例
socbis
975***651@qq.com
本题目可以也使用枚举类型数据作,但要令枚举初值为 120,不然不好输出:
#include<stdio.h> enum rival { x = 120, y, z }; int main() { enum rival a, b ,c; for(a = x;a <= z;a ++) { for(b = x; b <= z ;b++) { for(c = x ;c <= z; c++) { if(a != x && c != x && c != z && a != b && b != c && a != c) printf("a = %c\nb = %c\nc = %c\n",a,b,c); } } } return 0; }socbis
975***651@qq.com
henrydai
hen***ai1995@163.com
参考方法:
/****************************** 两个乒乓球队进行比赛,各出三人。 甲队为A,B,C三人,乙队为X,Y,Z三人。 已抽签决定比赛名单。有人向队员打听比赛的名单 .A说他不和X比,C说他不和X,Z比,请编程序找出三队赛手的名单。 *********************************/ #include <stdio.h> #pragma warning(disable:4996) int main() { char a,b,c; int i,j; int n = 0; for(i=0;i<3;++i) { a = 'x'+i;//A的位置,I是相对于X的偏移量 for(j=1;j<3;++j) { b = 'x'+(i+j)%3;//B相对与A的位置,(I+J)%3为偏移量 c = 'x'+3-(i+j)%3-i;//C的位置 要 减去两个偏移量 if(a!='x'&&c!='x'&&c!='z') { printf("a--%c,b--%c,c--%c\n",a,b,c); n = 1; break; } } if(n == 1) break; } system("pause"); }henrydai
hen***ai1995@163.com
瞿小凯
194***6983@qq.com
这个题的思路我觉得可以用假定数字来计算:
#include <stdio.h> int main(void) { int temp = 0; //将x,y,z编号 int x = 1; int y = 2; int z = 3; int a = 0; int b = 0; int c = 0; printf("x的编号为:%d \r\n",x); printf("y的编号为:%d \r\n",y); printf("z的编号为:%d \r\n",z); for(temp=1;temp<=3;temp++) { if(temp!=x && temp!=z) { c = temp; } } //a的对手不会是c的对手 for(temp=1;temp<=3;temp++) { if(temp!=x && temp!=c) { a = temp; } } //b的对手不会是a、c的对手 for(temp=1;temp<=3;temp++) { if(temp!=a && temp!=c) { b = temp; } } printf("\r\n"); printf("a的对手编号为:%d \r\n",a); printf("b的对手编号为:%d \r\n",b); printf("c的对手编号为:%d \r\n",c); return 0; }瞿小凯
194***6983@qq.com
金色葵花菜籽
122***814@qq.com
参考代码:
#include <stdio.h> int main() { // 要使程序在给定范围内遍历,不满足条件的筛去 // 只需确定一个队的比赛名单,另一队也就相应确定了 // 遍历从 'x' 到 'z' 的所有字符 for (char m = 'x'; m <= 'z'; m++) { // 如果字符不是 'x' 也不是 'z',则打印为 'c' 的名单 if (m != 'x' && m != 'z') { printf("(c,%c)\n", m); //c的名单 } // 如果字符不是 'x',则打印为 'a' 的名单,这里实际上只有 'z' 符合条件 else if (m != 'x') { printf("(a,%c)\n", m); //a的名单 } // 如果字符是 'x',则打印为 'b' 的名单 else { printf("(b,%c)\n", m); //b的名单 } } return 0; }金色葵花菜籽
122***814@qq.com