刘谦魔术我用代码还原了,魔术尽头是数学,数学尽头是神学!

刘谦在春晚让两个半张扑克牌合在一起的时候,我就知道其中必然有数学的奥妙。

假设我们初始卡牌为1,2,3,4。对半撕开后我们定义扑克牌为:

1(1) 2(1) 3(1) 4(1) 
1(2) 2(2) 3(2) 4(2)

按照刘谦的魔术,你需要把所有牌叠到一起,你可以选择把(2)压到(1)上,或者把(1)压到(2)上,这里洪爵选择把(1)压到(2)上,现在的卡牌顺序为:

1(1) 2(1) 3(1) 4(1) 1(2) 2(2) 3(2) 4(2) 

现在放上面3张到中间

4(1) 1(1) 2(1) 3(1) 1(2) 2(2) 3(2) 4(2) 

然后藏起来最上面那张,所以这个步骤之后,无论你之前选择怎么压,藏起来的要么是4(1)要么是4(2)。洪爵这里藏起来的是4(1)

藏起来: 4(1)
1(1) 2(1) 3(1) 1(2) 2(2) 3(2) 4(2) 

接下来刘谦魔术需要自问自己是南方人还是北方人,南方人把最上面1张牌放中间,北方人放2张,不知道的放3张hh。这一步其实没有什么所谓,因为我们需要的牌依然在最后一张,前面的牌都是要扔掉的,所以无关顺序,这个南北方人相当于迷惑我们的操作。

这个时候比较精彩的是,对于男女生来说,扔掉的卡牌的数量不一样,女生扔掉2张,男生扔掉一张,那么我们可以表示为:

男神们 x x x x x 4(2)
女神们 x x x x 4(2)

男生还剩下6张牌,女生剩下5张牌。

男生需要的牌4(2)在偶数位,女生的在奇数位置。

那么 见证奇迹的时刻,需要7次把最上面的牌放到最下面,真的见证时刻了,

男神们 x x x x 4(2) x
女神们 x x 4(2) x x

男生和女生所需要的牌都在奇数位置,接下面就是保留好运,丢掉霉运,保留的是奇数,扔掉的是偶数

只要确保4(2)在最后一轮被留下来即可。

最后…尼格买提hhh,小表情太到位了。

这里附上洪爵手敲的源码:


public class Main {
    public static void main(String[] args) {

        List<Integer> originCards = Arrays.asList(1, 2, 3, 4);

        System.out.print("-----初始卡牌:----- ");
        for (Integer originCard : originCards) {
            System.out.print(originCard + " ");
        }
        System.out.println();

        System.out.println("-----对撕一半后现在的卡牌为:-----");
        List<String> cardPart1 = new ArrayList<>();
        originCards.forEach(originCard -> cardPart1.add(originCard + "(1)"));
        List<String> cardPart2 = new ArrayList<>();
        originCards.forEach(originCard -> cardPart2.add(originCard + "(2)"));
        cardPart1.forEach(card -> System.out.print(card + " "));
        System.out.println();
        cardPart2.forEach(card -> System.out.print(card + " "));
        System.out.println();
        System.out.println("-----请问您发财的小手是想把(1)放在上面, 还是(2)放在上面?(输入1或2)");
        Scanner in = new Scanner(System.in);

        int position = in.nextInt();
        Deque<String> deque = new LinkedList<>();
        if (position == 1) {
            deque.addAll(cardPart1);
            deque.addAll(cardPart2);
        } else if (position == 2) {
            deque.addAll(cardPart2);
            deque.addAll(cardPart1);
        } else {
            System.out.println("不符合预期");
            return;
        }
        System.out.println("您的卡牌从上到下顺序为:");
        deque.forEach(card -> System.out.print(card + " "));
        System.out.println();
        System.out.println("现在放3张到中间");
        String card2 = deque.removeLast();
        for (int i = 0; i < 3; i ++) {
            String card1 = deque.removeFirst();
            deque.addLast(card1);
        }
        deque.addLast(card2);
        System.out.println("您的卡牌从上到下顺序为:");
        deque.forEach(card -> System.out.print(card + " "));
        System.out.println();
        System.out.println("您现在要把第一张, 即" + deque.removeFirst() + "藏起来");
        System.out.println("您的卡牌从上到下顺序为:");
        deque.forEach(card -> System.out.print(card + " "));
        System.out.println();
        System.out.println("您的另一半卡牌一直在最后一个位置没有变化");

        System.out.println("您是北方人输入2(放2张到中间)还是南方人输入1(放1张到中间), 不确定输入3(放3张到中间)");
        int region = in.nextInt();
        card2 = deque.removeLast();
        for (int i = 0; i < region; i ++) {
            String card1 = deque.removeFirst();
            deque.addLast(card1);
        }
        deque.addLast(card2);
        System.out.println("您的卡牌当前从上到下顺序为:");
        deque.forEach(card -> System.out.print(card + " "));
        System.out.println();
        System.out.println("您的另一半卡牌一直在最后一个位置没有变化");

        System.out.println("您是女神 输入2(从上到下扔2张), 还是男神 输入1(从上到下扔1张)?");
        int gold = in.nextInt();
        for (int i = 0; i < gold; i++) {
            deque.removeFirst();
        }

        System.out.println("您的卡牌当前从上到下顺序为:");
        deque.forEach(card -> System.out.print(card + " "));
        System.out.println();

        System.out.println("现在连续放7张牌到底下");
        for (int i = 0; i < 7; i++) {
            deque.add(deque.removeFirst());
        }

        System.out.println("您的卡牌当前从上到下顺序为:");
        deque.forEach(card -> System.out.print(card + " "));
        System.out.println();

        System.out.println("现在才是最关键的步骤, 我们可以发现我们的另一张牌一直在奇数位置");
        System.out.println("男生扔掉1张剩下6张 移动7次变奇数 女生剩下5张 移动7次依然奇数不变");
        System.out.println("只要确保需要的牌在最后一轮被留下来即可");
    }
}

【b站和微信都可搜Knight洪爵,求求关注捏,干货多多】
刘谦魔术我用代码还原了,魔术尽头是数学,数学尽头是神学!_第1张图片

你可能感兴趣的:(java,尼格买提,春晚,魔术,刘谦)