2 条题解
-
0
#include<bits/stdc++.h> using namespace std; // [1] 全局变量,存储书架上书的总数量 int n; // [2] 全局数组,存储书架每个位置的书的编号,数组大小适配题目n≤1000的数据范围 int arr[1100]; int main(){ // [3] 定义位置变量:left记录编号1的书的位置,right记录编号n的书的位置 int left = 0 , right = 0; // [4] 遍历输入的n本书,定位编号1和编号n的书的初始位置 for(int i = 0 ; i < n ; i++) { cin >> arr[i]; // [5] 读取书架第i个位置的书的编号 if(arr[i] == 1) left = i; // [6] 找到编号1的书,记录其所在位置 if(arr[i] == n) right = i; // [7] 找到编号n的书,记录其所在位置 } // [8] 累加变量,记录机器人的总操作次数 int sum = 0; // [9] 循环左移,将编号1的书移动到书架最左端(位置0) while(left != 0) { // [10] 核心处理:左移时若遇到编号n的书,同步更新n的位置(1左移会推动n右移1位) if(arr[left - 1] == arr[right]) right++; swap(arr[left] , arr[left - 1] ); // [11] 交换相邻两本书,完成一次左移操作 left--; // [12] 更新编号1的书左移后的新位置 sum++; // [13] 完成一次操作,总次数+1 } // [14] 循环右移,将编号n的书移动到书架最右端(位置n-1) while(right != n-1) { swap(arr[right] , arr[right + 1] ); // [15] 交换相邻两本书,完成一次右移操作 right++; // [16] 更新编号n的书右移后的新位置 sum++; // [17] 完成一次操作,总次数+1 } cout << sum; // [18] 输出整理书架的最小操作总次数 return 0; }
信息
- ID
- 1471
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 10
- 标签
- 递交数
- 1
- 已通过
- 1
- 上传者