咖啡


私信TA

用户名:Tianxn

访问量:128872

签 名:

十年OI一场空,不开LL见祖宗。

等  级
排  名 9
经  验 26154
参赛次数 10
文章发表 197
年  龄 22
在职情况 学生
学  校 西安电子科技大学
专  业 软件工程

  自我简介:

解题思路:其实重点就再最后一条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;
}


 

0.0分

28 人评分

  评论区

#include <stdio.h>
#include <string.h>
int main()
{ 
	int n;
	scanf("%d", &n);

	char arr[100] = { 0 };
	scanf("%s", arr);
	int m = 0;
	scanf("%d", &m);
	for (int i = m-1 ; i < n; i++)
	{
		printf("%c", arr[i]);
	}
	return 0;
}
2024-03-05 16:49:51
#include<stdio.h>
int main()
{
	int n,i;
	scanf("%d",&n);
	char a[n];
	for(i=0;i<n;i++)
	{
		scanf("%c",&a[i]); 
	}
	int k;
	scanf("%d",&k);
	char b[k];
	int j;
	for(i=k-1;i<n;i++)
	{
		for(j=0;j<k;j++)
		{
			b[j]=a[i];
			break;
		}
	}
	printf("%s",b);
	return 0;
}
2021-11-27 21:07:04
楼主表达的是这个意思吗?
#include <stdio.h>
int main()
{
    char s[1000];
    int n, m,i;
    scanf("%d", &n);
    getchar();//去回车
    for(i = 0; i < n; i++)
    {
        scanf("%c", &s[i]);
    }
    getchar();//去回车
    scanf("%d", &m);
 for(i =m-1; i < n; i++)
    {
        printf("%c", s[i]);
    }
    return 0;
}
2021-05-26 20:43:01
明白楼主意思了,是这样
#include<stdio.h>
int main(){
	int m,n,i;
	char a[1000];
	char b[1000];
	scanf("%d",&n);
	for(i=0;i<=n;i++){
		scanf("%c",&a[i]);
	}
	scanf("%d",&m);
	for(i=0;i<=n-m;i++){
		b[i]=a[i+m];
	}
	printf("%s",b);
	return 0;
}
2020-03-15 22:08:02
这是1046的题解吧,放错地方了吧
2019-05-18 09:50:07
答非所问
2019-04-11 19:37:20
这个 。。 完全看不懂 我的编译器表示 无法识别
2019-01-26 20:25:34
学到了个新东西,不过与题目要求不符啊
2018-11-15 11:25:42
  • «
  • 1
  • »