题目 有n个整数,使前面各数顺序向后移m个位置,最后m个数变成最前面m个数。编写函数实现上述功能,在主函数中输入n个整数,并输出调整后的n个数。假设是20个数 移动4位
1.递归算法
2非递归算法
1.
#include <stdio.h>
void move (int array[],int n,int m);
main()
{
int number[20],n=20,m=4,i;
for(i=0;i<20;i++)//循环输入数组中的元素
scanf("%d",&number[i]);
move(number,n,m);//进入函数里
for(i=0;i<20;i++)//打印出来变化后的数组
printf("%d",number[i]);
}
void move (int array[],int n,int m)//定义函数框架
{
int *p,array_end;//定义一个整型指针,array_end关键字用来存放最后一位数
array_end=*(array+n-1);//将最后一位数赋给array_end
for(p=array+n-1;p>array;p--)//进入循环体进行一次逐位移动
*p=*(p-1);
*array=array_end;//最后一位赋给第一位
m--;
if(m>0) move(array,n,m);//和上一条语句共同决定移动次数,递归的体现
}
2.非递归算法
#include<stdio.h>
main()
{
int array_end=0,a,j;
int array[20],n,m,i;
n=20;
for(i=0;i<20;i++)
scanf("%d",&array[i]);//输入数组的各元素
for(m=4;m>0;m--)//4次
{
array_end=array[19];//把数组最后一个数赋给array_end
for(j=20;j>0;j--)
{
array[n-1]=array[n-2];//数组中前一个赋值给后一个,从后往前进行
n--;
}
array[0]=array_end;//最后一位赋给第一位
n=20;//恢复n的值
}
for(a=0;a<20;a++)
printf("%d ",array[a]);//打印出来新的数组
}
|