20130922 阿里巴巴 笔试题 最后一题 消数字 - Tristan's blog


20130922 阿里巴巴 笔试题 最后一题 消数字 - Tristan's blog
题目描述:
在黑板上写下50个数字:1到50.在接下来的49轮操作中,每次做如下动作:选取黑板上的两个数字a和b,擦去,写上|a-b|。请问最后一次动作之后,剩余的数字可能是什么?
答案
1到50之间所有的奇数
分析
题目一拿上来,感觉无从下手,老是想用数论的知识或者DP之类的方法迅速搞定。这种类型的题目(互联网公司常考的数学题、算法题)或者从纯计算机的思维来考虑(DP、分治、贪心、深搜、广搜等),或者从数学角度来考虑(数学归纳法,反证法,数字之间的关系、数字的特征、转变为几何问题等)。此题目我们从最基础的数学归纳法的角度来考虑。
当只有 1,2两个数字时,黑板上只能留下1
当有1,2,3,4时,黑板上可能留下0,2,4
当有1,2,3,4,5,6,时,黑板上可能留下1,3,5
当有1,2,3,4,5,6,7,8时,黑板上可能留下0,2,4,6,8
由以上规律,我们假设:黑板上有1-2*n个数字,当n为奇数时,黑板上可能留下的数字为1到2*n-1之间的所有奇数;当n为偶数时,黑板上留下的是0到2*n之间所有的偶数。
由于25(50/2)属于奇数,我们先只考虑奇数的问题。
当n=1时,显然成立
假设当n=k时(k为奇数),1,2,3…..2*k满足假设(也就是黑板上可能剩下1到k之间所有的奇数)
则当n=k+2时,黑板上可能存在的数字"一定"包括(这里很矛盾,"可能"并且"一定","可能"是指黑板上可能留下的数字,这是一个总的集合,而"一定"是指这个总的集合里面一定包含某些数字,当然,这个总的集合也可能包含其它数字,比如偶数)先前的1到2*k-1之间所有的奇数,因为这时总的序列是1,2,3….2k,2k+1,2k+2,2k+3,2k+4,只要我们先把2k+2和2k+1去掉,留下1,然后把2k+3与2k+4去掉留下1,再把两个1去掉,得到0,前面2k个按照上一轮的操作得到1到2*k-1之间所有的奇数即可。想得到2*k+1的话,就让前2k个剩下2k-1,然后用2k+4减去2k+3,得到1,2k+1再减去1得到2k,然后2k减去前2k个剩下的2k-1,得到1,然后用2k+2减去1得到最终的2k+1;同理,可以得到2k+3.
以此,得证部分结论:黑板上有1-2*n个数字,当n为奇数时,黑板上可能留下的数字包含1到2*n-1之间的所有奇数
证明充分必要性
根据题意我们可以得知,最后剩下的数字肯定是0到2n之间的数字,因为绝对值不会出现负数,而非负数之间差的绝对值不会大于做运算的其中任意一个数字。所以,我们可以得知,黑板上最多存在0到2n的数字。那么,如何知道剩下的肯定不是偶数呢?
这里我们根据奇数和偶数之间的运算一堆奇数和偶数做减法,奇数与奇数相减,得到的是偶数,因此奇数的总数目减2;奇数与偶数相减,得到的还是奇数,奇数的总数目不变。也就是说,奇数的总个数的奇偶性不发生变化。因为n是奇数,代表奇数的个数是奇数,因为最后肯定只剩下一个数字,所以剩下的只可能是奇数。
充分必要性得证。
同理,偶数的情况也可以得证

Read full article from 20130922 阿里巴巴 笔试题 最后一题 消数字 - Tristan's blog

Labels

LeetCode (1432) GeeksforGeeks (1122) LeetCode - Review (1067) Review (882) Algorithm (668) to-do (609) Classic Algorithm (270) Google Interview (237) Classic Interview (222) Dynamic Programming (220) DP (186) Bit Algorithms (145) POJ (141) Math (137) Tree (132) LeetCode - Phone (129) EPI (122) Cracking Coding Interview (119) DFS (115) Difficult Algorithm (115) Lintcode (115) Different Solutions (110) Smart Algorithm (104) Binary Search (96) BFS (91) HackerRank (90) Binary Tree (86) Hard (79) Two Pointers (78) Stack (76) Company-Facebook (75) BST (72) Graph Algorithm (72) Time Complexity (69) Greedy Algorithm (68) Interval (63) Company - Google (62) Geometry Algorithm (61) Interview Corner (61) LeetCode - Extended (61) Union-Find (60) Trie (58) Advanced Data Structure (56) List (56) Priority Queue (53) Codility (52) ComProGuide (50) LeetCode Hard (50) Matrix (50) Bisection (48) Segment Tree (48) Sliding Window (48) USACO (46) Space Optimization (45) Company-Airbnb (41) Greedy (41) Mathematical Algorithm (41) Tree - Post-Order (41) ACM-ICPC (40) Algorithm Interview (40) Data Structure Design (40) Graph (40) Backtracking (39) Data Structure (39) Jobdu (39) Random (39) Codeforces (38) Knapsack (38) LeetCode - DP (38) Recursive Algorithm (38) String Algorithm (38) TopCoder (38) Sort (37) Introduction to Algorithms (36) Pre-Sort (36) Beauty of Programming (35) Must Known (34) Binary Search Tree (33) Follow Up (33) prismoskills (33) Palindrome (32) Permutation (31) Array (30) Google Code Jam (30) HDU (30) Array O(N) (29) Logic Thinking (29) Monotonic Stack (29) Puzzles (29) Code - Detail (27) Company-Zenefits (27) Microsoft 100 - July (27) Queue (27) Binary Indexed Trees (26) TreeMap (26) to-do-must (26) 1point3acres (25) GeeksQuiz (25) Merge Sort (25) Reverse Thinking (25) hihocoder (25) Company - LinkedIn (24) Hash (24) High Frequency (24) Summary (24) Divide and Conquer (23) Proof (23) Game Theory (22) Topological Sort (22) Lintcode - Review (21) Tree - Modification (21) Algorithm Game (20) CareerCup (20) Company - Twitter (20) DFS + Review (20) DP - Relation (20) Brain Teaser (19) DP - Tree (19) Left and Right Array (19) O(N) (19) Sweep Line (19) UVA (19) DP - Bit Masking (18) LeetCode - Thinking (18) KMP (17) LeetCode - TODO (17) Probabilities (17) Simulation (17) String Search (17) Codercareer (16) Company-Uber (16) Iterator (16) Number (16) O(1) Space (16) Shortest Path (16) itint5 (16) DFS+Cache (15) Dijkstra (15) Euclidean GCD (15) Heap (15) LeetCode - Hard (15) Majority (15) Number Theory (15) Rolling Hash (15) Tree Traversal (15) Brute Force (14) Bucket Sort (14) DP - Knapsack (14) DP - Probability (14) Difficult (14) Fast Power Algorithm (14) Pattern (14) Prefix Sum (14) TreeSet (14) Algorithm Videos (13) Amazon Interview (13) Basic Algorithm (13) Codechef (13) Combination (13) Computational Geometry (13) DP - Digit (13) LCA (13) LeetCode - DFS (13) Linked List (13) Long Increasing Sequence(LIS) (13) Math-Divisible (13) Reservoir Sampling (13) mitbbs (13) Algorithm - How To (12) Company - Microsoft (12) DP - Interval (12) DP - Multiple Relation (12) DP - Relation Optimization (12) LeetCode - Classic (12) Level Order Traversal (12) Prime (12) Pruning (12) Reconstruct Tree (12) Thinking (12) X Sum (12) AOJ (11) Bit Mask (11) Company-Snapchat (11) DP - Space Optimization (11) Dequeue (11) Graph DFS (11) MinMax (11) Miscs (11) Princeton (11) Quick Sort (11) Stack - Tree (11) 尺取法 (11) 挑战程序设计竞赛 (11) Coin Change (10) DFS+Backtracking (10) Facebook Hacker Cup (10) Fast Slow Pointers (10) HackerRank Easy (10) Interval Tree (10) Limited Range (10) Matrix - Traverse (10) Monotone Queue (10) SPOJ (10) Starting Point (10) States (10) Stock (10) Theory (10) Tutorialhorizon (10) Kadane - Extended (9) Mathblog (9) Max-Min Flow (9) Maze (9) Median (9) O(32N) (9) Quick Select (9) Stack Overflow (9) System Design (9) Tree - Conversion (9) Use XOR (9) Book Notes (8) Company-Amazon (8) DFS+BFS (8) DP - States (8) Expression (8) Longest Common Subsequence(LCS) (8) One Pass (8) Quadtrees (8) Traversal Once (8) Trie - Suffix (8) 穷竭搜索 (8) Algorithm Problem List (7) All Sub (7) Catalan Number (7) Cycle (7) DP - Cases (7) Facebook Interview (7) Fibonacci Numbers (7) Flood fill (7) Game Nim (7) Graph BFS (7) HackerRank Difficult (7) Hackerearth (7) Inversion (7) Kadane’s Algorithm (7) Manacher (7) Morris Traversal (7) Multiple Data Structures (7) Normalized Key (7) O(XN) (7) Radix Sort (7) Recursion (7) Sampling (7) Suffix Array (7) Tech-Queries (7) Tree - Serialization (7) Tree DP (7) Trie - Bit (7) 蓝桥杯 (7) Algorithm - Brain Teaser (6) BFS - Priority Queue (6) BFS - Unusual (6) Classic Data Structure Impl (6) DP - 2D (6) DP - Monotone Queue (6) DP - Unusual (6) DP-Space Optimization (6) Dutch Flag (6) How To (6) Interviewstreet (6) Knapsack - MultiplePack (6) Local MinMax (6) MST (6) Minimum Spanning Tree (6) Number - Reach (6) Parentheses (6) Pre-Sum (6) Probability (6) Programming Pearls (6) Rabin-Karp (6) Reverse (6) Scan from right (6) Schedule (6) Stream (6) Subset Sum (6) TSP (6) Xpost (6) n00tc0d3r (6) reddit (6) AI (5) Abbreviation (5) Anagram (5) Art Of Programming-July (5) Assumption (5) Bellman Ford (5) Big Data (5) Code - Solid (5) Code Kata (5) Codility-lessons (5) Coding (5) Company - WMware (5) Convex Hull (5) Crazyforcode (5) DFS - Multiple (5) DFS+DP (5) DP - Multi-Dimension (5) DP-Multiple Relation (5) Eulerian Cycle (5) Graph - Unusual (5) Graph Cycle (5) Hash Strategy (5) Immutability (5) Java (5) LogN (5) Manhattan Distance (5) Matrix Chain Multiplication (5) N Queens (5) Pre-Sort: Index (5) Quick Partition (5) Quora (5) Randomized Algorithms (5) Resources (5) Robot (5) SPFA(Shortest Path Faster Algorithm) (5) Shuffle (5) Sieve of Eratosthenes (5) Strongly Connected Components (5) Subarray Sum (5) Sudoku (5) Suffix Tree (5) Swap (5) Threaded (5) Tree - Creation (5) Warshall Floyd (5) Word Search (5) jiuzhang (5)

Popular Posts