整粒玉米酿酒技术视频:c语言 急!!!!!!!!!1

来源:百度文库 编辑:查人人中国名人网 时间:2024/05/07 11:53:18
编一个程序 :

有n个整数,使其前面各数顺序向后移m个位置,最后m个数变成最前面m个数

#include <stdio.h>
int main()
{
int A[100],B[100],n,m,i;
printf("input n:\n");/*输入整数个数*/
scanf("%d",&n);
printf("input m:\n");/*输入m*/
scanf("%d",&m);
for(i=0;i<n;i++)
{printf("input number:\n");/*依次输入n个数字*/
scanf("%d",&B[i]);
}
for(i=0;i<n;i++)
{
A[i]=B[(i+m)%n];
}
printf("After transform the array is:\n");
for(i=0;i<n;i++)
printf("%d ",A[i]);
getch();
return 0;
}

好象用链表可以解决,具体我也不太清楚,你可以看一下相关的内容.

似可以做一个两头的队列 ,然从队尾做m次的出,从另头做m次的进入。

算法(伪语言描述)
-------------------------------------------
BEGIN
int a[n]
int t

输入数组a[]

for(循环m次)
数组中最后一个数a[n]存到临时变量t中
所有的数后移一位
将临时变量中的值给a[0]
endfor
for(以i为循环变量循环m/2次)
将a[i]与a[m-i]交换
endfor
END
___________________________________________

是要对数组还是链表进行操作?如果是链表的话,搞个循环链表,然后把头指针移到相应位置就行了。
如果是数组,如下 //这个程序占空间大,但运行时间比较快
#include <stdlib.h>
void move(int *a, int n, int m) //长度为n的数组a前移m位
{
int i;
int *b;
m %= n; //防止m>n
b = (int*)malloc(n*sizeof(int));
memcpy(b,a+n-m,sizeof(int)*m);
memcpy(b,a,sizeof(int)*(n-m));
memcpy(a,b,sizeof(int)*n);
free(b);
}

这题如果是数组,而且只允许添加一个空间的话,就有点难度了。
Zz小虾米的程序,我当年第一次碰到这个问题时也写出了这样的程序,可惜是错的。
如果能解决这个问题,下一步就可以尝试去解决m x n(m<>n)矩阵原地转置的算法了。