Manchester


私信TA

用户名:wenyajie

访问量:312328

签 名:

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

等  级
排  名 1
经  验 62665
参赛次数 1
文章发表 188
年  龄 0
在职情况 学生
学  校 Xiamen 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分

56 人评分

  评论区

先把a数组n-m保存到b数组
再把a数组后移m 然后把b数组接到a前面



#include <stdio.h>

int main()

{

    int n, m, t = 0;

    scanf("%d", &n);

    int a[n];

    for (int i = 0; i < n; i++)

    {

        scanf("%d", &a[i]);

    }

    scanf("%d", &m);

    int b[m];

    // 把a数组后m个数保存到b数组

    for (int i = n - m; i < n; i++) // 假设n=10,m=2  10-2=8 i<10  1 2 3 4 5 6 7 8 9 10 b[0]=9 b[1]=10

    {

        b[t] = a[i];

        t++;

    }

    // 把a数组后移m位

    for (int i = 9; i >= 0; i--)

    { // a[9]=a[7] =8  a[8]=a[6] =7...交换后  1 2 1 2 3 4 5 6 7 8

        a[i] = a[i
2023-12-12 22:55:10
scanf("%d", &n);
	for (i = 0;i < n;i++) {
		scanf("%d", &arr[i]); // 输入
	}
	scanf("%d", &m);
	move(arr, n, m);

	for (i = 0;i < 10;i++) {
		printf("%d ", arr[i]); // 输出
	}
	return 0;
}


本人新手,不喜勿喷,谢谢!
2023-12-11 23:42:57
#define _CRT_SECURE_NO_WARNINGS 
#include <stdio.h>

int move(int arr[], int n,int m) {
	int i = 0, j = 0, brr[100] = { 0 }, b = 0;
	for (i = n-m;i <n;i++){
		brr[j++] = arr[i]; //将数组后面要移的元素存到新数组brr里
	}
	for (i = 0;i < m;i++) {
		for (j = n-m-1+i;j >=i;j--){ // 双循环将数组逐次后移  内循环 1arr[0-->8]-->arr[1-->9}
			arr[j + 1] = arr[j];     //                     内循环 2arr[1-->9]-->arr[2-->10]
		}
	} 
	for (i = 0;i < m;i++) {// 再将后面的元素连接到数组前面
		arr[i] = brr[b++];
	}
	return 0;
} 

int main() {
	int n = 0, i = 0, m = 0;
	int arr[1000] = { 0 };
	scanf("%d", &n);
	for (i = 0;i < n;i++) {
		scanf("%d", &arr[i]
2023-12-11 23:41:19
#include<iostream>
using namespace std;
void reverse(int a[],int size){
    for(int i=0; i<size/2; i++){
        int temp = a[i];
        a[i] = a[size-i-1];
        a[size-i-1] = temp;
    }
}
int main() {
    int n;
    cout << "请输入位数"<< endl;
    cin >> n;
    int *a=new int[n];
    cout << "请输入数组"<< endl;
    for (int i = 0; i < n; i++){
        cin>>a[i];
    }
    int m;
    cout << "请输入偏移量"<< endl;
    cin >> m;
    reverse(a,n);
    reverse(a,m);
    reverse(a+m,n-m);
    for (int i = 0; i < n; i++){
        cout<<a[i]<<' ';
    }
    delete [] a;
}
请问我这个为什么答案错误
2022-11-25 19:32:47
#include<stdio.h>
int main()
{
	int a[12];
	int i;
	for(i=2;i<12;i++)
	{
		scanf("%d",&a[i]);
	}
	a[0]=0;
	a[1]=0;
	int w;
	w=a[10];a[10]=a[0];a[0]=w;
	w=a[11];a[11]=a[1];a[1]=w;
	
	for(i=0;i<10;i++)
	{
		printf("%d",a[i]);
	}
}
为啥他说我结果错误
2022-11-01 16:45:19
#include<stdio.h>
int main()
{
   int a[1000];
   int b[1000];
   int i,j,n,m,k,l;
   scanf("%d",&n);
   for(i=0;i<n;i++){
    scanf("%d",&a[i]);
   }
   scanf("%d",&m);
   for(j=0;j<m;j++){
     b[m-1-j]=a[n-1-j];
   }
   for(l=0;l<m;l++){
    printf("%d ",b[l]);
   }
   for(k=0;k<n-m;k++){
      printf("%d ",a[k]);
   }

    return 0;
}
2022-05-31 16:29:00
#include<stdio.h>
void move(int a[],int n,int m){
	int i;
	for(i=n-m;i<n;i++){ // 10-2;
		printf("%d ",a[i]);
	}
	for(i=0;i<n-m;i++){
		printf("%d ",a[i]);
	}
}
int main(){
	int i; // int i
	int m,n;//输入多少和移动多少;
	int a[100];
	scanf("%d",&n);
	for(i=0;i<n;i++){
		scanf("%d",&a[i]);
	} 
	scanf("%d",&m); //移动的位数;
	move(a,n,m);
	return 0;
}
2022-05-21 19:29:36
#include<stdio.h>

void fun(int *a,int *b,int n,int m)
{
	int i;
	for(i = 0;i < (n - m);i++)
	{
		b[m + i] = a[i];
	}
	for(i = 0;i < m;i++)
	{
		b[i] = a[n - m + i];
	}
}

int main()
{
	int n,m,a[100],b[100];
	int i;
	scanf("%d",&n);

	for(i = 0;i < n;i++)
		scanf("%d",&a[i]);

	scanf("%d",&m);

	fun(a,b,n,m);

	for(i = 0;i < n;i++)
		printf("%d ",b[i]);
	printf("\n");
	return 0;
}
2022-05-20 15:00:52