标签:bsp pat 共勉 efi 思路 题目 pen scan isp
数组的题还是普遍比较简单的,这道题我取巧了,取巧的方法看看就行,没多大意义,用了点循环队列的思想()
其实比赛的时候,无论怎么过的都无所谓,能过就行。我直接在读入数据的时候做了手脚……。让 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比数组大
PAT不易,诸君共勉!
标签:bsp pat 共勉 efi 思路 题目 pen scan isp
原文地址:https://www.cnblogs.com/daker-code/p/11625500.html