P 1008 数组元素循环右移问题
转跳点:
数组的题还是普遍比较简单的,这道题我取巧了,取巧的方法看看就行,没多大意义,用了点循环队列的思想()

其实比赛的时候,无论怎么过的都无所谓,能过就行。我直接在读入数据的时候做了手脚……。让 i 从 step 开始 到 numsize+step 结束。然后中间索引改成 i % numsize 。这样在存入的时候就完成的了移动。不过这样就违背了题目的初衷,我们在A题了之后还是老老实实的用正常的点的方法写一遍吧,毕竟咱是来练技术的。
先贴一下水过的代码
1 /**
2 * @brief 正常的方法
3 * @note 2019/10/5
4 * @author 杨文蓁的小迷弟
5 */
6 #include <stdio.h>
7 #include <stdlib.h>
8 #define MAX_SIZE 110
9
10 int main()
11 {
12 int numsize, step;
13 int numarrays[MAX_SIZE] = {0};
14 scanf("%d %d", &numsize, &step);
15
16 for (int i = step; i < numsize + step; i++)
17 {
18 scanf("%d", &numarrays[i % numsize]);
19 }
20
21 for (int i = 0; i < numsize; i++)
22 {
23 printf("%s%d", 0 == i ? "" : " ", numarrays[i]);
24 }
25
26 return 0;
27 }
看看就好
其实正常的思路也很简单,写过插入排序就知道,这玩意适合从后往前操作。首先将数组的最后一个存起来,接着将让数组的前一个赋值给后一个,当循环到数组头部时,将temp给第一个位置。step有多大,就循环多少次
贴一下代码:
1 /**
2 * @brief 正常的方法
3 * @note 2019/10/5
4 * @author 杨文蓁的小迷弟
5 */
6 #include <stdio.h>
7 #include <stdlib.h>
8 #define MAX_SIZE 110
9
10 int main()
11 {
12 int numsize, step;
13 int numarrays[MAX_SIZE] = {0};
14 scanf("%d %d", &numsize, &step);
15
16 for (int i = 0; i < numsize; ++i)
17 {
18 scanf("%d", &numarrays[i]);
19 }
20
21 for (int i = 0; i < step; ++i)
22 {
23 int temp = numarrays[numsize - 1];
24 for (int j = numsize - 1; j >= 0; --j)
25 {
26 numarrays[j] = numarrays[j - 1];
27 if (0 == j)
28 {
29 numarrays[j] = temp;
30 }
31 }
32 }
33
34 for (int i = 0; i < numsize; i++)
35 {
36 printf("%s%d", 0 == i ? "" : " ", numarrays[i]);
37 }
38
39 return 0;
40 }
正常方法
其实还有一种抠字眼的做法,他说一个数组,没说不能开大一点,那我们就开大一点,从numsize + step - 1 ~ step 做一次循环,前面0 ~ step -1在做一次循环。这个虽然有点小小浪费空间,但是其赋值次数大大缩减了,所有个人还是比较推崇最后一种的
1 /**
2 * @brief 正常的方法
3 * @note 2019/10/5
4 * @author 杨文蓁的小迷弟
5 */
6 #include <stdio.h>
7 #include <stdlib.h>
8 #define MAX_SIZE 110
9
10 int main()
11 {
12 int numsize, step;
13 int numarrays[MAX_SIZE] = {0};
14 scanf("%d %d", &numsize, &step);
15
16 for (int i = 0; i < numsize; ++i)
17 {
18 scanf("%d", &numarrays[i]);
19 }
20
21 step %= numsize;
22 for (int i = numsize + step - 1; i > step - 1; i--)
23 {
24 numarrays[i] = numarrays[i - step];
25 }
26 for (int i = 0; i <= step - 1; i++)
27 {
28 numarrays[i] = numarrays[numsize + i];
29 }
30
31 for (int i = 0; i < numsize; i++)
32 {
33 printf("%s%d", 0 == i ? "" : " ", numarrays[i]);
34 }
35
36 return 0;
37 }
抠字眼
上面的两个代码记得加一步step%numsize;防止step比数组大
PTA不易,诸君共勉!
P 1008 数组元素循环右移问题的更多相关文章
- PAT乙级 1008. 数组元素循环右移问题 (20)
1008. 数组元素循环右移问题 (20) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 一个数组A中存有N(N>0)个整数,在不允 ...
- PAT乙级真题1008. 数组元素循环右移问题 (20)
原题: 1008. 数组元素循环右移问题 (20) 时间限制400 ms内存限制65536 kB 一个数组A中存有N(N>0)个整数,在不允许使用另外数组的前提下,将每个整数循环向右移M(M&g ...
- PAT-乙级-1008. 数组元素循环右移问题 (20)
1008. 数组元素循环右移问题 (20) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 一个数组A中存有N(N>0)个整数,在不允 ...
- [C++]PAT乙级1008.数组元素循环右移问题 (20/20)
/* 1008. 数组元素循环右移问题 (20) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 一个数组A中存有N(N>0)个整数, ...
- PAT 乙级 1008 数组元素循环右移问题 (20) C++版
1008. 数组元素循环右移问题 (20) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 一个数组A中存有N(N>0)个整数,在不允 ...
- PAT 1008 数组元素循环右移问题 (20)(代码)
1008 数组元素循环右移问题 (20)(20 分) 一个数组A中存有N(N>0)个整数,在不允许使用另外数组的前提下,将每个整数循环向右移M(M>=0)个位置,即将A中的数据由(A ...
- 【PAT】1008. 数组元素循环右移问题 (20)
1008. 数组元素循环右移问题 (20) 一个数组A中存有N(N>0)个整数,在不允许使用另外数组的前提下,将每个整数循环向右移M(M>=0)个位置,即将A中的数据由(A0A1……AN- ...
- PAT 乙级 1008.数组元素循环右移问题 C++/Java
1008 数组元素循环右移问题 (20 分) 题目来源 一个数组A中存有N(>)个整数,在不允许使用另外数组的前提下,将每个整数循环向右移M(≥)个位置,即将A中的数据由(A0A1⋯ ...
- PAT——1008. 数组元素循环右移问题
一个数组A中存有N(N>0)个整数,在不允许使用另外数组的前提下,将每个整数循环向右移M(M>=0)个位置,即将A中的数据由(A0A1……AN-1)变换为(AN-M …… AN-1 A0 ...
- PAT 1008. 数组元素循环右移问题 (20)
一个数组A中存有N(N>0)个整数,在不允许使用另外数组的前提下,将每个整数循环向右移M(M>=0)个位置,即将A中的数据由(A0 A1--AN-1)变换为(AN-M -- AN-1 A0 ...
随机推荐
- 「CH6202」黑暗城堡
「CH6202」黑暗城堡 传送门 这道题是要让我们求以点 \(1\) 为源点的最短路树的方案数. 我们先跑一遍最短路,然后考虑类似 \(\text{Prim}\) 的过程. 当我们把点 \(x\) 加 ...
- 「CF1037D」Valid BFS?
传送门 Luogu 解题思路 考虑直接模拟 \(\text{BFS}\) 的过程. 对于每一个节点的儿子,先遍历在输入序列中靠前的,判断 \(\text{BFS}\) 是否匹配即可. 细节注意事项 注 ...
- [转]简单总结一下解决 添加 inline-block 后多出来的空隙
添加 inline-block 后: 查询.借鉴的原网址:http://www.zhangxinxu.com/wordpress/?p=2357 html 结构: <ul class=" ...
- Xcode10升级问题:Multiple commands produce Info.plist
升级到Xcode10以后,编译过程遇到的第一个问题就是类似于这样的: Multiple commands produce '/Users/jiaxiaoyan/Library/Developer/Xc ...
- HTML相关知识点(2)
CSS: 字体: 网页默认字体16px; 网站通用字体大小14px 最小是12px,最大无限大 单位换算:1em=16px 选择器:标签选择器:选择页面中所有指定标签,权重为1 通配符选择器:选择所 ...
- 奇异值分解(SVD)和主成分分析(PCA)
参考: 奇异值分解:https://www.cnblogs.com/endlesscoding/p/10033527.html 主成分分析:https://blog.csdn.net/program_ ...
- 「SCOI2009」windy数
传送门 Luogu 解题思路 数位 \(\text{DP}\) 设状态 \(dp[now][las][0/1][0/1]\) 表示当前 \(\text{DP}\) 到第 \(i\) 位,前一个数是 \ ...
- [翻译]使用Visual Studio Code怎样调试Rust
我将 Visual Studio Code 作为Rust首选编辑器.遗憾的是 VS Code 不能非常好地完成 Rust 的调试. 配置调试器不难,但仍然需要几个步骤.我已经完整配置了好几次.我正在写 ...
- 解决vmware 桥联 再次使用联不上网的问题
在vmare里 编辑 虚拟网络配置 桥联 自动设置 改为你正在联网的网卡 这个问题针对有线网卡 和无限网卡使用的问题
- 多元线性回归算法python实现(非常经典)
对于多元线性回归算法,它对于数据集具有较好的可解释性,我们可以对比不过特征参数的输出系数的大小来判断它对数据的影响权重,进而对其中隐含的参数进行扩展和收集,提高整体训练数据的准确性.整体实现代码如下所 ...