1 条题解
-
0
#include <iostream> using namespace std; int main() { int n, k, x; // n=牌的数量,k=洗牌次数,x=目标位置(1索引) // [1] 输入牌数、洗牌次数和目标位置 cin >> n >> k >> x; int arr[1005]; // 存储当前牌堆的编号(n≤1000,数组大小足够) // [2] 初始化牌堆,初始编号为1到n for (int i = 0; i < n; ++i) { arr[i] = i + 1; } int m = n / 2; // 每次洗牌分成两堆的大小 // [3] 重复k次洗牌操作 for (int step = 0; step < k; ++step) { int new_arr[1005]; // 存储洗牌后的新牌堆 int idx = 0; // 新牌堆的填充索引 // [4] 交替从前后两堆取元素,生成新牌堆 for (int i = 0; i < m; ++i) { new_arr[idx++] = arr[i]; // 取前半部分的第i张 new_arr[idx++] = arr[m + i]; // 取后半部分的第i张 } // [5] 将原牌堆更新为洗牌后的新牌堆 for (int i = 0; i < n; ++i) { arr[i] = new_arr[i]; } } // [6] 输出第x张牌的编号(x是1索引,转换为数组的0索引x-1) cout << arr[x - 1] << endl; return 0; }
- 1
信息
- ID
- 1195
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 3
- 标签
- 递交数
- 1
- 已通过
- 1
- 上传者