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 ...
随机推荐
- python用户界面编程和文件转换为exe文件
python用户界面编程学习代码如下所示: #python用户图形界面编程实现import sys #简单用户图形界面实现from PyQt5.QtWidgets import QApplicatio ...
- python中对闭包的理解
运行环境声明:本人的代码在sublime text 3中写的,可以Ctrl+b运行.python版本是python3.6.如果您直接运行的,请自觉加入if __name__ == '__main__' ...
- 关于length、length()、size()
length:属性,数组的属性. length(): String的方法,方法体里面是 return value.length; size():集合如list.set.map的方法,返回元素个数.
- day06 python 3中的编码
#python2 和 python3 的一些区别 ''' #python2 print('aaa') print'aaa' range() xrange()生成器 raw_input() #pytho ...
- vagrant 添加带版本号的 box
众所周知,vagrant添加box的时候要从外网下载,那速度...(说多了都是泪),所以只好用下载工具下载到本地之后再添加. 如何搭建 homestead:https://laravelacademy ...
- 回顾PHP:第一章:PHP基础语法(2)
十.PHP常量和变量——用常量限制用户跳过某些文件(重要) 十.1常量在代码中定义.书写方式: define(常量名,常量值) 注:1.常量值只能为标量 2.常量名可以小写,但是通常大写 3.常量名可 ...
- 【Python基础知识】【语法】【入门】
一.Python概述 Python是一门面向对象的编程语言,拥有强大丰富的库,没有操作系统的限制,是一种优美.清晰的编程语言. 二.Python基础语法 1.Python标识符 标识符就是程序中定义的 ...
- PHP+MySQL实现在线测试答题实例
这个实例主要给大家介绍如何使用jQuery+PHP+MySQL来实现在线测试题,包括动态读取题目,答题完毕后台评分,并返回答题结果. 读取答题列表: $sql = "select * fro ...
- Python format语法
a = {"name" : "alex","age":16} v = "my name is {name}, my age is ...
- poj1703 Find them, Catch them(种类并查集
题目地址:http://poj.org/problem?id=1703 题目大意:警察抓了n个坏蛋,这些坏蛋分别属于龙帮或蛇帮.输入m个语句,A x y询问x和y的关系(在一个帮派,不在,不能确定), ...