题目:
有n个整数,使前面各数顺序向后移m个位置,最后m个数变成前面m个数。写一函数:实现以上功能,在主函数中输入n个数和输出调整后的n个数。
我的代码:
#include<stdio.h>
int main()
{
int n,local;
int num1[100],num2[100];
scanf("%d",&n);
for(int i=0;i<n;i++)
{
scanf("%d",&num1[i]);
}
for(int i=0;i<n;i++)
{
num2[i]=num1[i];
}
scanf("%d",&local);
for(int i=0;i<n-local;i++)
{
num1[i+local]=num2[i];
}
for(int i=0;i<local;i++)
{
num1[i]=num2[i+n-local];
}
for(int i=0;i<n;i++)
{
printf("%d ",num1[i]);
}
return 0;
}
通过设置两个数组来满足移位条件
其他代码:
#include <stdio.h>
#include <malloc.h>
void Reverse( int *A, int p, int q ); /*把p到q个数做一次逆置操作*/
void con_vert( int *A, int n ); /*总转换函数*/
void input_data( int *A, int n ); /*输入数组元素*/
void out_put( int *A, int n ); /*输出函数*/
/*======================================*/
int main()
{
int *A;
int n, m;
while ( scanf( "%d", &n ) != EOF )
{
A = (int *) malloc( n * sizeof(int) ); /*为数组开辟空间*/
input_data( A, n ); /*输入数据*/
con_vert( A, n ); /*进行转换*/
out_put( A, n ); /*输出结果*/
free( A ); /*释放空间*/
}
return(0);
}
/*======================================*/
void input_data( int *A, int n ) /*输入数组元素*/
{
for ( int i = 0; i < n; i++ )
scanf( "%d", &A[i] );
}
/*======================================*/
void con_vert( int *A, int n ) /*总转换函数*/
{
int m;
scanf( "%d", &m ); /*输入开始移动的位置*/
if ( m <= 0 || m >= n )/*判断输入位置是否合法*/
return;
else{
Reverse( A, 0, n - m - 1 );
Reverse( A, n - m, n - 1 );
Reverse( A, 0, n - 1 );
}
}
/*======================================*/
void Reverse( int *A, int p, int q ) /*把p到q个数做一次逆置操作*/
{
int term;
for ( int i = p, j = q; i < j; i++, j-- ) /*进行逆置换*/
{
term = A[i];
A[i] = A[j];
A[j] = term;
}
}
/*======================================*/
void out_put( int *A, int n ) /*输出函数*/
{
for ( int i = 0; i < n - 1; i++ )
printf( "%d ", A[i] );
printf( "%d\n", A[n - 1] );
}