欢迎大家订阅我的专栏:算法题解:C++与Python实现!
本专栏旨在帮助大家从基础到进阶 ,逐步提升编程能力,助力信息学竞赛备战!
专栏特色
1.经典算法练习:根据信息学竞赛大纲,精心挑选经典算法题目,提供清晰的代码实现与详细指导,帮助您夯实算法基础。
2.系统化学习路径:按照算法类别和难度分级,从基础到进阶,循序渐进,帮助您全面提升编程能力与算法思维。
适合人群:
- 准备参加蓝桥杯、GESP、CSP-J、CSP-S等信息学竞赛的学生
- 希望系统学习C++/Python编程的初学者
- 想要提升算法与编程能力的编程爱好者
附上汇总贴:学而思编程周赛语言基础组 | 汇总
【题目描述】
小美和小猴一共有 n n n 张卡片,每张卡片上都有一个编号,他们把这些卡片水平摆成一排,初始时这些卡片的编号从左到右依次为 1 ∼ n 1∼n 1∼n。
小猴偷偷恶作剧了一下:将编号从 k ∼ n k∼n k∼n 的卡片移到到前面,从而编号从 1 ∼ k − 1 1∼k−1 1∼k−1 的卡片就摆在了后面。例如 n = 6 , k = 3 n=6,k=3 n=6,k=3,初始时编号依次为 1 , 2 , 3 , 4 , 5 , 6 1,2,3,4,5,6 1,2,3,4,5,6,将编号从 3 ∼ 6 3∼6 3∼6 的卡片移到前面之后,卡片摆放的顺序为: 3 , 4 , 5 , 6 , 1 , 2 3,4,5,6,1,2 3,4,5,6,1,2。
现在小美想要知道从前往后的第 x x x 张卡片上的编号是多少,请你利用计算机编程帮助小美完成查找。
【输入】
一行,包含三个整数 n , k , x n,k,x n,k,x。
【输出】
一行,包含一个整数,表示结果。
【输入样例】
6 3 5
【输出样例】
1
【代码详解】
#include <bits/stdc++.h>
using namespace std;
// 定义全局变量:
// n: 总数
// k: 分组大小
// x: 查询位置
long long n, k, x;
int main()
{
// 输入三个参数n, k, x
cin >> n >> k >> x;
// 判断查询位置x是否在前n-k+1个位置
if (x <= (n - k + 1))
{
// 如果在前n-k+1个位置,直接计算位置对应的值
cout << k + (x - 1) << endl;
}
else
{
// 如果在后k-1个位置,循环计算位置对应的值
cout << 1 + (x - (n - k + 2)) << endl;
}
return 0;
}
【运行结果】
6 3 5
1