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 ...
随机推荐
- 【PAT甲级】1028 List Sorting (25 分)
题意: 输入一个正整数N(<=100000)和C(C属于{1,2,3}),接下来输入N行,每行包括学生的六位学号(习惯用string输入,因为可能有前导零),名字和成绩(正整数).输出排序后的信 ...
- JSONObject遍历并替换部分json值
今天做接口对接,在更新价格时,最开始传的值为整数,发现报错,询问对方后得知需要统一保留两位小数,没有则为.00,于是对原有JSONObject进行改造,遍历并替换其中的值.下面贴出代码: JSONOb ...
- 如何优雅地根治null值引起的Bug!
本人免费整理了Java高级资料,涵盖了Java.Redis.MongoDB.MySQL.Zookeeper.Spring Cloud.Dubbo高并发分布式等教程,一共30G,需要自己领取.传送门:h ...
- Django线上项目后台admin不显示问题
记一次django项目的线上部署错误,django+nginx 一.问题描述 在将django项目部署到阿里云(nginx作为web服务器)上之后发现出现后台管理界面admin不显示样式. 二.问题分 ...
- STM32CubeMX+FreeRTOS 定时器os_timer的使用
转载:https://blog.csdn.net/jacklondonjia/article/details/78497120在STM32CubeMX的FreeRTOS配置中,使能FreeRTOS的S ...
- SICOM SOP
SOPs A Service-Object Pair (SOP) Class is defined by the union of an Information Object Definition ( ...
- 45 孩子们的游戏(圆圈中最后剩下的数) + list操作总结+ for_each多记忆容易忘记
题目描述 每年六一儿童节,牛客都会准备一些小礼物去看望孤儿院的小朋友,今年亦是如此.HF作为牛客的资深元老,自然也准备了一些小游戏.其中,有个游戏是这样的:首先,让小朋友们围成一个大圈.然后,他随机指 ...
- Linux下四种安装软件方式
1.yum源安装 可以解决依赖关系,但不确定安装的位置 2.rpm 基础安装 要自己解决依赖问题 rpm -ivh 安装 rpm -uvh 更新 rpm -e --nodeps 卸载 取消依赖 ...
- 61 C项目------家庭收支软件
1,目标: ①模拟实现一个基于文本界面的<家庭收支软件> ②涉及知识点 局部变量和基本数据类型 循环语句 分支语句 简单的屏幕输出格式控制 2,需求说明: ①模拟实现基于文本界面的< ...
- activity标题栏和状态栏操作
修改显示的标题 1.修改AndroidMainfest.xml文件的label标签 2.setTitle("标签"); 去掉标签的显示 1.android:theme=" ...