Manchester


私信TA

用户名:wenyajie

访问量:163391

签 名:

在历史前进的逻辑中前进,这个逻辑就是人心向背的逻辑

等  级
排  名 1
经  验 38316
参赛次数 1
文章发表 188
年  龄 0
在职情况 学生
学  校 Qing Dao University
专  业 计算机科学

  自我简介:

在历史前进的逻辑中前进,这个逻辑就是人心向背的逻辑

解题思路:
①:设数组元素为n,移动位置为m,数组为A[]

②:把最后m个数变为前面m个数,相当于把数组A循环左移n-m个元素

③:要实现A中序列循环左移n-m个位置只需

1):先把A中前n-m个元素逆置

2):再把A中剩下的元素逆置

3):最后把A中所有元素整体逆置

逆置实现:

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;
    }

}

④:输出结果


参考代码:

#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分

30 人评分

  评论区

#include<stdio.h>
int main()
{
	int n;
	scanf("%d", &n);
	int a[100];
	for (int i = 0; i < n; i++)
	{
		scanf("%d", &a[i]);
	}
	int m;
	scanf("%d", &m);
	int b[100];
	for (int j = 0; j < n; j++)
	{
		b[j] = a[(j+n-m)%n];
	}
	for (int j = 0; j < n; j++)
	{
		printf("%d ", b[j]);
	}
	return 0;
}
2020-11-09 20:59:58 | |
#include <stdio.h>
int main(void)
{
	int n;
	int b[1024] = { 0 };
	int a=0;
	int m=0;
	scanf_s("%d", &n);
	for (int i = 0; i < n; i++)
	{	
		scanf_s("%d", &a);
		b[i] = a;
	}
	scanf_s("%d",& m);
	for (int i = 0; i < m; i++)
		printf("%d ", b[n + i - m]);
	for (int i = 0; i < 10 - m; i++)
		printf("%d ", b[i]);
	return 0;
}
2020-07-25 16:56:39 | |
#include<stdio.h>

int main()
{
    int * a;
    int n;
    int i,m,j,temp;
    scanf("%d",&n);
    while(getchar() != '\n')
        continue;
    a = (int*) malloc(n * sizeof(int));
    for(i=0;i<n;i++){
        scanf("%d",(a+i));
    }
    while(getchar() != '\n')
        continue;
    scanf("%d",&m);
    for(i=0;i<m;i++){
        temp = *(a+9);
        for(j=n-1;j>0;j--){
            *(a+j) = *(a+j-1);
        }
        *(a+0) = temp;
    }
    for(i=0;i<n;i++){
        printf("%d ",*(a+i));
    }
    free(a);


    return 0;
}
2020-04-29 14:00:03 | |
#include <bits/stdc++.h>
using namespace std;


int main(){
	int n,m;
	int a[100]={0};
	int b[100]={0};
	scanf("%d",&n);
	
	for(int i=0;i<n;i++){
		scanf("%d",&a[i]);
	}
	scanf("%d",&m);
	
	for (int i=0;i<n;i++){
		b[i]=a[i];
	}
	
	for(int i=0;i<n;i++){
		a[i+m]=b[i];
	}
	
	for(int i=0;i<m;i++){
		a[i]=b[n-m+i];
	}
	
	for(int i=0;i<n;i++){
		cout<<a[i]<<" ";
	}
	
	return 0;
}
2020-04-20 15:19:35 | |
方法确实是好方法,但是第一次见 真的是一脸懵。
建议大家先根据答主的代码走一遍流程画出结果图,然后在自己敲代码,不然你会横看成岭侧成峰,远近高低各不同
2020-02-11 16:27:11 | |
大佬们,我这个为啥编译错误啊!!
#include<stdio.h>
int main()
{
    int a[100],b[100];
    int n,m,i,t;
    scanf("%d",&n);
    for(i=0;i<n;i++)
    {scanf("%d",a[i]);
    b[i]=a[i];}
    scanf("%d",&m);
    for(i=0,t=m;t<n;i++,t++)
    a[t]=b[i];
    for(i=0,t=10-m;i<m;i++,t++)
    a[i]=b[t];
    for(i=0;i<n;i++)
    printf("%d ",a[i]);
    return 0;
}
2020-02-07 11:18:17 | |
大佬求解,为什么这会答案出错?
#include <stdio.h>

void NumberHandle(int *p,int cnt, int num);

int main (int argc, const char *argv[])
{
    int m,n;
    scanf("%d",&n);     //输入数据的个数n
    int a[n];
    for(int i = 0; i < n; i++){
        scanf("%d",&a[i]);
    }
    scanf("%d",&m);     //移动的位置m
    NumberHandle(a,m,n);
    for(int i = 0; i < n; i++){
        printf("%d ",a[i]);
    }
    return 0;
}

void NumberHandle(int *p,int cnt,int num)
{
    int i;
    while(cnt--)
	{	i = 0;
		int t = p[0];
    	for(int x = num-1; x > 0; x--)
    	{
    		if(i == 0){
    			p[i] = p[x];
    			i+=x;
			}else if(x>0){
2020-01-16 11:58:34 | |
#include<stdio.h>
int main()
{
	int a[100],b[100]={0},i,j,m,n;
	scanf("%d",&n);
	for(i=0;i<n;i++)
	{
		scanf("%d",&a[i]);
	}
	scanf("%d",&m);
	for(i=0;i<n;i++)
	{
		j=i+m;
		if(i+m>n-1)
		{
		  j=i+m-n;
	    }
		b[j]=a[i];  
	}
	for(i=0;i<n;i++)
	  printf("%d ",b[i]);
	  
	return 0;
}
2019-11-22 00:23:12 | |