【问题描述】设将n(n>1)个整数存放在一维数组R中。试设计一个在时间和空间两方面都尽可能高效的算法。将R中保存的序列循环左移P(P>0)个位置。
例如,假设P<n,将R中的数据(X0,X1…..Xn-1)循环左移P个位置后,变换为(Xp, XP+1,…..Xn-1,X0,X1……Xp-1)
【输入形式】循环移动的位数,数组中数据的个数,循环前的数组
【输出形式】循环后的数组
【样例输入】3 5 1 2 3 4 5
【样例输出】4 5 1 2 3
【样例说明】请大家注意,循环位移的位数可能超过数组中元素个数;输入与输出的数据均以空格分割,其中输入的数据中第一个是循环移位的位数,第二个是数组中数据的个数,后面的是数组中的数据。
【评分标准】除了提交之后自动判分之外,还会根据代码的时间复杂度酌情给分,请大家尽量降低空间、时间复杂度
傻逼题,直接上代码
#include<stdio.h>
int main(){
int a[100];
int b[100];
int i;
int sum = 0;
for( i = 0;i<100;i++)
{
scanf("%d", &a[i]);
// printf("%d", a[i]);
sum++;
char c = getchar();
// printf("%c",c);
// char c2 = getchar();
if(c == '\n')
{
break;
}
}
sum = (sum+1)/2;
int n = sum;
printf("%d\n", sum);
int ii = 0;
int jj = n-1;
for(i = 0;i<n;i++)
{
printf("%d ", a[i]);
}
for(i = 0;i<n;i++)
{
if(a[i]%2 != 0)
{
b[ii++] = a[i];
//cout<<a[i];
printf("%d\n", a[i]);
}
}
for( i = n-1;i>=0;i--)
{
if(a[i]%2 == 0)
{
b[jj--] = a[i];
printf("%d\n", a[i]);
}
}
for(i = 0;i<=n-2;i++)
{
printf("%d,",b[i]);
}
printf("%d",b[n-1]);
return 0;
}