一道面试题,我自己的解法
生活随笔
收集整理的這篇文章主要介紹了
一道面试题,我自己的解法
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
?
題目來自于:?http://www.cnblogs.com/humble/p/3937667.html
本博客地址:http://www.cnblogs.com/wolfred7464/p/3940186.html
?
第一題:
A、B、C、D、E五名學(xué)生有可能參加計(jì)算機(jī)競賽,根據(jù)下列條件判斷哪些
??人參加了競賽:
? ?(1)A參加時,B也參加;
? ?(2)B和C只有一個人參加;
? ?(3)C和D或者都參加,或者都不參加;
? ?(4)D和E中至少有一個人參加;
? ?(5)如果E參加,那么A和D也都參加。?
?
只有 ABCDE 5個人,所以最多只有 2^5 = 32 種情況,枚舉所有情況然后判斷是否合法就可以了。
用5位二進(jìn)制數(shù)表示答案ans,從低到高依次是ABCDE。即ABCDE分別是1,2,4,8,16。所以判斷A參加只要 ans & a == a 就可以了。
寫10個函數(shù),分別表示每個人參加和不參加兩種情況。
代碼是用C語言寫的,A()表示A參加,rA()表示A不參加,寫的很倉促,將就著看下。
1 #include <stdio.h> 2 3 const int a = 1; 4 const int b = 2; 5 const int c = 4; 6 const int d = 8; 7 const int e = 16; 8 9 int ans = 0; 10 11 int A() 12 { 13 return (ans & b) == b; 14 } 15 16 int rA() 17 { 18 return 1; 19 } 20 21 int B() 22 { 23 return (ans & c) == 0; 24 } 25 26 int rB() 27 { 28 return 1; 29 } 30 31 int C() 32 { 33 return (ans & b) == 0 && (ans & d) == d; 34 } 35 36 int rC() 37 { 38 return (ans & d) == 0; 39 } 40 41 int D() 42 { 43 return C(); 44 } 45 46 int rD() 47 { 48 return (ans & e) == e; 49 } 50 51 int E() 52 { 53 return (ans & a) == a && (ans & d) == d; 54 } 55 56 int rE() 57 { 58 return (ans & d) == d; 59 } 60 61 int main() 62 { 63 for (ans = 0; ans <= 31; ans++) { //31就是2進(jìn)制的11111 64 int leg = 0; 65 for (int i = 0; i < 5; i++) { 66 int flag = ans & (1 << i); 67 switch (i) { 68 case 0: 69 leg += (flag ? A() : rA()); 70 break; 71 case 1: 72 leg += (flag ? B() : rB()); 73 break; 74 case 2: 75 leg += (flag ? C() : rC()); 76 break; 77 case 3: 78 leg += (flag ? D() : rD()); 79 break; 80 case 4: 81 leg += (flag ? E() : rE()); 82 break; 83 } 84 } 85 if (leg == 5) { 86 printf("%d\n", ans); 87 } 88 } 89 return 0; 90 } View Code?
轉(zhuǎn)載于:https://www.cnblogs.com/wolfred7464/p/3940186.html
總結(jié)
以上是生活随笔為你收集整理的一道面试题,我自己的解法的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ios中静态库的创建和使用、制作通用静态
- 下一篇: oracle中关于删除表purge语句和