解题思路:其实重点就再最后一条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 <cstdio>
int main()
{
	int s[1000], n, m;
	scanf("%d", &n);
	for(int i = 0; i < n; ++i)
	{
		scanf("%d", &s[i]);
	}
	scanf("%d", &m);
	for(int i = 0; i < n; ++i)
	{
		printf("%d ", s[(i+n-m)%n]);
	}
	return 0;
}


点赞(28)
 

0.0分

24 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 16 条评论

HZUBboy辉 5年前 回复TA
@programme 坑人
咖啡 5年前 回复TA
@飞羽 你可真有意思,不要为了写程序而写程序
飞羽 5年前 回复TA
答非所问
一点秋水 5年前 回复TA
这个 。。 完全看不懂 我的编译器表示 无法识别
咖啡 6年前 回复TA
@programme 一样的,你可以把printf语句换成赋值语句,最后打印新字符也行
programme 6年前 回复TA
学到了个新东西,不过与题目要求不符啊