题目链接:https://www.patest.cn/contests/pat-b-practise/1008
思路:直接在读入数据时,下标设置不同,将其读入到移动后的位置,虽然不和题意,但结果是对的,
正确的思路:(1)可以创建一个列表,则右移只需要修改最后一个节点的指针和第一个节点的头指针。
(2)若只能用储存为数据形式,可以N=x*M+K,所以用一个a来储存中间变量,当转移个数小于K趟,一趟转移x+1次,大于K时,则x次。然后就只有前M个数位置不对,在调整前面M个位置。
所以总的次数为M*K*(x+1)+x*M*(M-K)+M*(M-K)……+2
注意点:思路要开阔。
1 #include<stdio.h> 2 int main() 3 { 4 int str[101]; 5 int n,m; 6 scanf("%d %d",&n,&m); 7 if(n>m) 8 { 9 for(int i=m;i<n;i++)scanf("%d",&str[i]); 10 for(int i=0;i<m;i++)scanf("%d",&str[i]); 11 } 12 else if(n==m) 13 for(int i=m;i<n;i++)scanf("%d",&str[i]); 14 else 15 { 16 int x=m%n; 17 for(int i=x;i<n;i++)scanf("%d",&str[i]); 18 for(int i=0;i<x;i++)scanf("%d",&str[i]); 19 } 20 for(int i=0;i<n;i++) 21 { 22 printf("%d",str[i]); 23 if(i<n-1)printf(" "); 24 } 25 return 0; 26 }