• 【猜牌算法】魔术师的游戏


    Description

    魔术师手中有m张牌,牌的编号为1-n,魔术师预先将牌排好后迭在一起,牌面朝下。对观众说:我不看牌,只数数就可以猜到每张牌是什么,我大声数数,你们听。不信?你们就看。

    魔术师按顺序从上到下数手中的牌,第一次数1,将第一张牌(最上面的那张牌)翻过来放到桌面,正好是牌1。第二次数1、2,将第一张牌放到这迭牌的下面,将第二张牌翻过来放到桌面,正好是牌2。第三次数1、2、3,将前面两张依次放在这迭牌的下面,再翻第三张牌放到桌面,正好是牌3。这样依次进行,将n张牌全翻过来,准确无误。问魔术师手中的牌原始次序是怎样安排的?

    Input

    输入第一行为一个整数T(1<=T<=10),表示有T组测试数据;

    对于每组测试数据格式如下:
    第一行为1个整数n(1<=n<=26)。
    Output

    为每个测试样例单独一行输出魔术师手中牌的原始次序,每个牌号之后跟一个空格。

    Sample Input
    5
    1
    2
    3
    4
    13 
    
    Sample Output
    1 
    1 2 
    1 3 2 
    1 4 2 3 
    1 8 2 5 10 3 12 11 9 4 7 6 13 

    解题思路:
    数组num用来储存牌,index表示当前下标。
    1.初始化,牌位里面都为空,0;
    2.第一个位置放1,依次往后数第n个空位(也就是说非空的不算在内)放牌n,到达数组尾部 就跳回下标为0继续循环

    实现代码:
    #include<iostream>
    using std::cin;
    using std::cout;
    using std::endl;
    
    int main() {
        int num[26];
        int T, n, total, index;
        cin >> T;  //T个测例 
        for (; T > 0; T--) {
            cin >> n;
            for (int i = 0; i < 26; i++) 
    		     num[i] = 0;           //初始化置空 
            num[0] = 1;                //第一个肯定放1 
            index = 1;
            for (int i = 2; i <= n; i++) {
                for (total = 0; total < i; ) {  //total用来表示当前第几个空牌位 
                   if (num[index] == 0) 
    			       total++;
                   if (total == i) 
    			       break;
                   if (index == n - 1)      //到达数组尾部跳回头部 
    			       index = 1;
                   else index++;
                }
                num[index] = i;           //放牌 
            }
            for (int i = 0; i < n; i++) {
                cout << num[i] << ' ';
            }
            cout << endl;
        }                                                                                                                                            
    }                                 
    
    
    

      (本博文或多或少参考过其他网上资料,但时间已久忘记当初的参考了,在此对他们表示感谢!)

     
    越努力越幸运~
  • 相关阅读:
    Codeforces Round #710 (Div. 3)
    Codeforces Round #708(Unrated on Div. 2)
    [JSOI2014]学生选课(二分+2-SAT)
    Educational Codeforces Round 103 (Rated for Div. 2)爆炸记
    AtCoder Beginner Contest 190
    GPU服务器centos7.4下安装jupyter后调用py文件以及调用失败的解决办法
    关于在centos7.4原来python2.7.5更新到python3.6或更高版本时注意事项
    Selenium初步应用
    CentOS利用docker安装MySQL5.7
    CentOS 常用命令
  • 原文地址:https://www.cnblogs.com/zengyh-1900/p/4064172.html
Copyright © 2020-2023  润新知