数字后移----1046

题目:

有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] );
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值