原题链接:C语言训练-委派任务*
方法1:使用按位与运算
假设0表示不去,1表示去,很显然这是一个二进制数,因此可以使用按位与运算求解,如果二进制数
#include int main() { int a, b, c, d, e, f; for (int i = 0; i < 64; i++) // 2^6 = 64 { // 将整数i右移后在与1进行按位与运算,然后把每一位分别赋值给a, b, c, d, e, f a = (i >> 5) & 1; b = (i >> 4) & 1; c = (i >> 3) & 1; d = (i >> 2) & 1; e = (i >> 1) & 1; f = i & 1; // printf("%d %d %d %d %d %d\n", a, b, c, d, e, f); // 检查条件是否满足 if ((a || b) && (a + d < 2) && (a + e + f == 2) && (b - c == 0) && (c + d == 1) && ((d == 0 && e == 0) || d == 1)) { // 如果条件满足,则打印变量值 // printf("%d %d %d %d %d %d\n", a, b, c, d, e, f); if (a == 1) printf("A,"); if (b == 1) printf("B,"); if (c == 1) printf("C,"); if (d == 1) printf("D,"); if (e == 1) printf("E,"); if (f == 1) printf("F,"); } } return 0; }
方法2:用6个循坏暴力求解
#include int main() { int A, B, C, D, E, F; int a, b, c, d, e, f; for (A = 0; A < 2; A++) { for (B = 0; B < 2; B++) { for (C = 0; C < 2; C++) { for (D = 0; D < 2; D++) { for (E = 0; E < 2; E++) { for (F = 0; F < 2; F++) { if ((A || B) && (A + D < 2) && (A + E + F == 2) && (B - C == 0) && (C + D == 1) && ((D == 0 && E == 0) || D == 1)) { a = A, b = B, c = C, d = D, e = E, f = F; // printf("%d %d %d %d %d %d\n", A, B, C, D, E, F); } } } } } } } if (a == 1) printf("A,"); if (b == 1) printf("B,"); if (c == 1) printf("C,"); if (d == 1) printf("D,"); if (e == 1) printf("E,"); if (f == 1) printf("F,"); return 0; }
0.0分
0 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复