构造队列

今天情人节,先送自己一朵花,以鼓励自己继续敲代码。
这里写图片描述
题目描述:
小明同学把1到n这n个数字按照一定的顺序放入了一个队列Q中。现在他对队列Q执行了如下程序:

while(!Q.empty())              //队列不空,执行循环

{

    int x=Q.front();            //取出当前队头的值x

    Q.pop();                 //弹出当前队头

    Q.push(x);               //把x放入队尾

    x = Q.front();              //取出这时候队头的值

    printf("%d\n",x);          //输出x

    Q.pop();                 //弹出这时候的队头
}

做取出队头的值操作的时候,并不弹出当前队头。
小明同学发现,这段程序恰好按顺序输出了1,2,3,…,n。现在小明想让你构造出原始的队列,你能做到吗?[注:原题样例第三行5有错,应该为3,以下已修正]

输入描述:
第一行一个整数T(T ≤ 100)表示数据组数,每组数据输入一个数n(1 ≤ n ≤ 100000),输入的所有n之和不超过200000。

输出描述:
对于每组数据,输出一行,表示原始的队列。数字之间用一个空格隔开,不要在行末输出多余的空格.

示例:
输入:

4
1
2
3
10

输出:

1
2 1
2 1 3
8 1 6 2 10 3 7 4 9 5

示例代码以及解析如下:

#include<iostream>
#include<deque>
using namespace std;

//假设某一组数据的输入为ABCDE
//则如何得到它的输出呢?
//1、ABCDE
//        ->BCDEA
//        ->CDEA  -->>输出B
//2、CDEA
//       ->DEAC
//       ->EAC  -->>输出BD
//3、EAC
//      ->ACE
//      ->CE   -->>输出BDA
//4、CE
//     ->EC
//     ->C  -->>输出BDAE
//5、C
//    ->C
//    ->空  -->>输出BDAEC
//最终输出结果是:BDAEC

//那么如何根据输出得到输入呢?--逆向反推即可。
//取出BDAEC的最后一个元素C
//1、C  -> BDAE
//再次取出最后一个元素E
//2、EC -> BDA
//     -> CE  将队列EC最后一个元素移动至队头
//再次取出最后一个元素A
//3、ACE -> BD
//      -> ECA 将队列ACE最后一个元素移动至队头
//.......

//核心思想:
//反复将输出队列的最后一个元素移至输入队列的队头,
//再调整当前输入队列:即将当前输入队列的最后一个元素移至队头。


int main()
{

    int nDataNum;//数据的组数
    cin >> nDataNum;

    for (int i = 0; i < nDataNum; ++i)
    {
        int nPerDataMax;//每组数据的最大值
        cin >> nPerDataMax;

        deque<int> deq;

        int temp;
        for (int j = nPerDataMax; j > 0; --j)
        {//将输出队列1,2,3,4,..,n逆序,依次放入输入队列deq
            //首先,放入n,
            //接下来,放入n-1,
            //....
            //最后,放入1。

            //将输出队列最后一个元素放入输入队列的队头
            deq.push_front(j);

            //取出输入队列最后一个元素
            temp = deq.back();
            //放至输入队列的队头
            //弹出最后一个元素
            deq.pop_back();
            deq.push_front(temp);


        }

        //输出该组数据的原始值
        for (int k = 0; k < deq.size(); ++k)
        {
            //cout << deq.front() << " ";
            //deq.pop_front();

            cout << deq[k] << " ";
        }

        cout << endl;

    }

    return 0;
}

测试用例如下:
测试用例:
41 14 30 70 3 14 60 77 69 13 77 9 9 29 36 49 97 53 2 64 37 3697 7961 4693 8015 8776 268 3057 7004 3847 6749 1133 298 8070 1980 9603 1077 4050 9795 7842 6975 8047
对应输出应该为:
11 1 8 2 13 3 9 4 12 5 10 6 14 7 23 1 16 2 27 3 17 4 24 5 18 6 29 7 19 8 25 9 20 10 28 11 21 12 26 13 22 14 30 15 53 1 36 2 62 3 37 4 54 5 38 6 70 7 39 8 55 9 40 10 63 11 41 12 56 13 42 14 67 15 43 16 57 17 44 18 64 19 45 20 58 21 46 22 69 23 47 24 59 25 48 26 65 27 49 28 60 29 50 30 68 31 51 32 61 33 52 34 66 35 2 1 3 11 1 8 2 13 3 9 4 12 5 10 6 14 7 53 1 31 2 46 3 32 4 57 5 33 6 47 7 34 8 54 9 35 10 48 11 36 12 59 13 37 14 49 15 38 16 55 17 39 18 50 19 40 20 58 21 41 22 51 23 42 24 56 25 43 26 52 27 44 28 60 29 45 30 39 1 68 2 40 3 59 4 41 5 73 6 42 7 60 8 43 9 69 10 44 11 61 12 45 13 77 14 46 15 62 16 47 17 70 18 48 19 63 20 49 21 74 22 50 23 64 24 51 25 71 26 52 27 65 28 53 29 76 30 54 31 66 32 55 33 72 34 56 35 67 36 57 37 75 38 58 35 1 61 2 36 3 53 4 37 5 69 6 38 7 54 8 39 9 62 10 40 11 55 12 41 13 66 14 42 15 56 16 43 17 63 18 44 19 57 20 45 21 68 22 46 23 58 24 47 25 64 26 48 27 59 28 49 29 67 30 50 31 60 32 51 33 65 34 52 7 1 12 2 8 3 11 4 9 5 13 6 10 39 1 68 2 40 3 59 4 41 5 73 6 42 7 60 8 43 9 69 10 44 11 61 12 45 13 77 14 46 15 62 16 47 17 70 18 48 19 63 20 49 21 74 22 50 23 64 24 51 25 71 26 52 27 65 28 53 29 76 30 54 31 66 32 55 33 72 34 56 35 67 36 57 37 75 38 58 5 1 9 2 6 3 8 4 7 5 1 9 2 6 3 8 4 7 15 1 26 2 16 3 23 4 17 5 28 6 18 7 24 8 19 9 27 10 20 11 25 12 21 13 29 14 22 32 1 19 2 28 3 20 4 36 5 21 6 29 7 22 8 33 9 23 10 30 11 24 12 35 13 25 14 31 15 26 16 34 17 27 18 25 1 48 2 26 3 38 4 27 5 44 6 28 7 39 8 29 9 47 10 30 11 40 12 31 13 45 14 32 15 41 16 33 17 49 18 34 19 42 20 35 21 46 22 36 23 43 24 37 49 1 96 2 50 3 74 4 51 5 86 6 52 7 75 8 53 9 92 10 54 11 76 12 55 13 87 14 56 15 77 16 57 17 95 18 58 19 78 20 59 21 88 22 60 23 79 24 61 25 93 26 62 27 80 28 63 29 89 30 64 31 81 32 65 33 97 34 66 35 82 36 67 37 90 38 68 39 83 40 69 41 94 42 70 43 84 44 71 45 91 46 72 47 85 48 73 27 1 47 2 28 3 41 4 29 5 52 6 30 7 42 8 31 9 48 10 32 11 43 12 33 13 51 14 34 15 44 16 35 17 49 18 36 19 45 20 37 21 53 22 38 23 46 24 39 25 50 26 40 2 1 64 1 33 2 49 3 34 4 57 5 35 6 50 7 36 8 61 9 37 10 51 11 38 12 58 13 39 14 52 15 40 16 63 17 41 18 53 19 42 20 59 21 43 22 54 23 44 24 62 25 45 26 55 27 46 28 60 29 47 30 56 31 48 32 19 1 33 2 20 3 29 4 21 5 37 6 22 7 30 8 23 9 34 10 24 11 31 12 25 13 36 14 26 15 32 16 27 17 35 18 28 1849 1 3582 2 1850 3 2774 4 1851 5 3236 6 1852 7 2775 8 1853 9 3467 10 1854 11 2776 12 1855 13 3237 14 1856 15 2777 16 1857 17 3640 18 1858 19 2778 20 1859 21 3238 22 1860 23 2779 24 1861 25 3468 26 1862 27 2780 28 1863 29 3239 30 1864 31 2781 32 1865 33 3583 34 1866 35 2782 36 1867 37 3240 38 1868 39 2783 40 1869 41 3469 42 1870 43 2784 44 1871 45 3241 46 1872 47 2785 48 1873 49 3669 50 1874 51 2786 52 1875 53 3242 54 1876 55 2787 56 1877 57 3470 58 1878 59 2788 60 1879 61 3243 62 1880 63 2789 64 1881 65 3584 66 1882 67 2790 68 1883 69 3244 70 1884 71 2791 72 1885 73 3471 74 1886 75 2792 76 1887 77 3245 78 1888 79 2793 80 1889 81 3641 82 1890 83 2794 84 1891 85 3246 86 1892 87 2795 88 1893 89 3472 90 1894 91 2796 92 1895 93 3247 94 1896 95 2797 96 1897 97 3585 98 1898 99 2798 100 1899 101 3248 102 1900 103 2799 104 1901 105 3473 106 1902 107 2800 108 1903 109 3249 110 1904 111 2801 112 1905 113 3694 114 1906 115 2802 116 1907 117 3250 118 1908 119 2803 120 1909 121 3474 122 1910 123 2804 124 1911 125 3251 126 1912 127 2805 128 1913 129 3586 130 1914 131 2806 132 1915 133 3252 134 1916 135 2807 136 1917 137 3475 138 1918 139 2808 140 1919 141 3253 142 1920 143 2809 144 1921 145 3642 146 1922 147 2810 148 1923 149 3254 150 1924 151 2811 152 1925 153 3476 154 1926 155 2812 156 1927 157 3255 158 1928 159 2813 160 1929 161 3587 162 1930 163 2814 164 1931 165 3256 166 1932 167 2815 168 1933 169 3477 170 1934 171 2816 172 1935 173 3257 174 1936 175 2817 176 1937 177 3670 178 1938 179 2818 180 1939 181 3258 182 1940 183 2819 184 1941 185 3478 186 1942 187 2820 188 1943 189 3259 190 1944 191 2821 192 1945 193 3588 194 1946 195 2822 196 1947 197 3260 198 1948 199 2823 200 1949 201 3479 202 1950 203 2824 204 1951 205 3261 206 1952 207 2825 208 1953 209 3643 210 1954 211 2826 212 1955 213 3262 214 1956 215 2827 216 1957 217 3480 218 1958 219 2828 220 1959 221 3263 222 1960 223 2829 224 1961 225 3589 226 1962 227 2830 228 1963 229 3264 230 1964 231 2831 232 1965 233 3481 234 1966 235 2832 236 1967 237 3265 238 1968 239 2833 240 1969 241 3684 242 1970 243 2834 244 1971 245 3266 246 1972 247 2835 248 1973 249 3482 250 1974 251 2836 252 1975 253 3267 254 1976 255 2837 256 1977 257 3590 258 1978 259 2838 260 1979 261 3268 262 1980 263 2839 264 1981 265 3483 266 1982 267 2840 268 1983 269 3269 270 1984 271 2841 272 1985 273 3644 274 1986 275 2842 276 1987 277 3270 278 1988 279 2843 280 1989 281 3484 282 1990 283 2844 284 1991 285 3271 286 1992 287 2845 288 1993 289 3591 290 1994 291 2846 292 1995 293 3272 294 1996 295 2847 296 1997 297 3485 298 1998 299 2848 300 1999 301 3273 302 2000 303 2849 304 2001 305 3671 306 2002 307 2850 308 2003 309 3274 310 2004 311 2851 312 2005 313 3486 314 2006 315 2852 316 2007 317 3275 318 2008 319 2853 320 2009 321 3592 322 2010 323 2854 324 2011 325 3276 326 2012 327 2855 328 2013 329 3487 330 2014 331 2856 332 2015 333 3277 334 2016 335 2857 336 2017 337 3645 338 2018 339 2858 340 2019 341 3278 342 2020 343 2859 344 2021 345 3488 346 2022 347 2860 348 2023 349 3279 350 2024 351 2861 352 2025 353 3593 354 2026 355 2862 356 2027 357 3280 358 2028 359 2863 360 2029 361 3489 362 2030 363 2864 364 2031 365 3281 366 2032 367 2865 368 2033 369 3691 370 2034 371 2866 372 2035 373 3282 374 2036 375 2867 376 2037 377 3490 378 2038 379 2868 380 2039 381 3283 382 2040 383 2869 384 2041 385 3594 386 2042 387 2870 388 2043 389 3284 390 2044 391 2871 392 2045 393 3491 394 2046 395 2872 396 2047 397 3285 398 2048 399 2873 400 2049 401 3646 402 2050 403 2874 404 2051 405 3286 406 2052 407 2875 408 2053 409 3492 410 2054 411 2876 412 2055 413 3287 414 2056 415 2877 416 2057 417 3595 418 2058 419 2878 420 2059 421 3288 422 2060 423 2879 424 2061 425 3493 426 2062 427 2880 428 2063 429 3289 430 2064 431 2881 432 2065 433 3672 434 2066 435 2882 436 2067 437 3290 438 2068 439 2883 440 2069 441 3494 442 2070 443 2884 444 2071 445 3291 446 2072 447 2885 448 2073 449 3596 450 2074 451 2886 452 2075 453 3292 454 2076 455 2887 456 2077 457 3495 458 2078 459 2888 460 2079 461 3293 462 2080 463 2889 464 2081 465 3647 466 2082 467 2890 468 2083 469 3294 470 2084 471 2891 472 2085 473 3496 474 2086 475 2892 476 2087 477 3295 478 2088 479 2893 480 2089 481 3597 482 2090 483 2894 484 2091 485 3296 486 2092 487 2895 488 2093 489 3497 490 2094 491 2896 492 2095 493 3297 494 2096 495 2897 496 2097 497 3685 498 2098 499 2898 500 2099 501 3298 502 2100 503 2899 504 2101 505 3498 506 2102 507 2900 508 2103 509 3299 510 2104 511 2901 512 2105 513 3598 514 2106 515 2902 516 2107 517 3300 518 2108 519 2903 520 2109 521 3499 522 2110 523 2904 524 2111 525 3301 526 2112 527 2905 528 2113 529 3648 530 2114 531 2906 532 2115 533 3302 534 2116 535 2907 536 2117 537 3

猜你喜欢

转载自blog.csdn.net/Lunar_Queen/article/details/81778851