星星坠入谷底


私信TA

用户名:JSJ210601

访问量:1317

签 名:

手握日月摘星辰,世间无我这般人

等  级
排  名 1354
经  验 2951
参赛次数 2
文章发表 18
年  龄 2
在职情况 学生
学  校 。。。
专  业 IT

  自我简介:

野蛮生长,璀璨生光,山水一程,三生有幸!

解题思路:

解题思路:其实重点就再最后一条printf语句中的取余哪里,其余的读入数据就不多说了,通过for循环读入即可;来看一下这个运算符 % 的魅力吧。

int a[10]={1,2,3,4,5,6,7,8,9,0};

对于上面的数组如何让它循环右移3位呢;通常的做法的是再创建一个数组;把后3位先读入新数组中,接着把原来数组中的0到len-3位置上的数据依次写入到新数组中(接着上一次 的末尾)。

还有一种的简便快捷的方法;那就是  利用  %(取余) 运算符来完成这个任务了;

我可以直接输出结果了!!!

for(int i =0; i < 10; ++i)

{

printf("%d ", a[(i+10-3)%10]);

}

就是上面的语句了;来解释一下:这是循环右移的,i=0时,i+10-3=7,a[7%10]=a[7]就是开始输出的位置了,或许有人说到数组末尾怎末办,当i=3时,i+10-3=10  这时候a[10]是不存在的,别忘了还有取余,a[10%10]=a[0];这样就自动的跑到数组的开始位置了,来看一下最后一个元素:i=10时,i+10-3=17 a[17%10]=a[7] 即最后一个元素就是a[7]了, 然后退出循环。

循环左移3位的就只用把 a[(i+10-3)%10]改为a[(i+3)%10];  和上面右移的逻辑时一样的。


注意事项:

参考代码:


#include<stdio.h>

int main()

{

int i,n,m;

int a[100];

scanf("%d",&n);

for(i=0;i<n;i++)

scanf("%d",&a[i]);

scanf("%d",&m);

for(i=0;i<n;i++)

printf("%d ",a[(i+n-m)%n]);

return 0;

}


 

0.0分

0 人评分

  评论区

  • «
  • »