解题思路:
①:设数组元素为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
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; } 本人新手,不喜勿喷,谢谢!
#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]
#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; } 请问我这个为什么答案错误
#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]); } } 为啥他说我结果错误
#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; }
#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; }
#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; }
dotcpp0712666 2023-12-12 22:56:14 |
#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 - m]; } // 把b数组接到a数组前面实现移动的效果? for (int i = 0; i < m; i++) { a[i] = b[i]; } // 排序后 for (int i = 0; i < n; i++) { printf("%d ", a[i]); } }
dotcpp0712666 2023-12-12 23:05:16 |
好吧被吞了