解题思路:
①:设数组元素为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 人评分
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <math.h> int main() { int m,p[100],n,pp[100],i; scanf("%d",&m); for(i=0;i<m;i++) scanf("%d",&p[i]); scanf("%d",&n); for(i=0;i<m-n;i++) pp[i+n]=p[i]; for(i=0;i<n;i++) pp[i]=p[i+m-n]; for(i=0;i<m;i++) printf("%d ",pp[i]); return 0; }
#include<stdio.h> //直接输出就行了 int main() { int i,j; int m,n; int a[100]; scanf("%d",&n); for(i=0;i<n;i++) { scanf("%d",&a[i]); } scanf("%d",&m); for(i=n-m;i<n;i++) { printf("%d ",a[i]); } for(i=0;i<n-m;i++) { printf("%d ",a[i]); } return 0; }
/*思路:先用另一个数组b复制数组a,对数组a从最后一个开始各自向后移动m位(全部执行) 去掉尾部“被顶出”的m个元素,从数组b取这m个数然后在数组a的头部补上*/ #include<stdio.h> int n,m,i; int a[100],b[100]; void display() { for(i=0;i<n;i++) { scanf("%d",&a[i]); } scanf("%d",&m); for(i=n-1;i>=0;i--) { b[i]=a[i]; a[i]=a[i-m];//比如10个数,要后移2位,用a[7]赋给a[9],a[6]赋给a[8]依次类推 } for(i=n-1;i>=n-m;i--) { a[i-(n-m)]=b[i];//根据例子推出的公式,如b[9]赋给a[1],b[8]赋给a[0],后移m位,b和a的下标相差n-m } } int main() { scanf("%d",&n); display(); for(i=0;i<n;i++) { printf("%d ",a[i]); } return 0; }
#include <stdio.h> int n,m; int main() { void move(int a[]); int a[1000],i; scanf("%d",&n); for(i=0;i<n;i++) scanf("%d",&a[i]); scanf("%d",&m); move(a); for(i=0;i<n;i++) printf("%d",a[i]); return 0; } void move(int a[]) { int i,j=0; for(i=n-1;i>=0;i--) a[i+m]=a[i]; for(j=0;j<m;j++) { a[j]=a[n]; n++; } } 大佬们我这个为啥答案错误啊,输出结果是9 10 1 2 3 4 5 6 7 8 9 10
名字好难想 2022-01-30 21:52:13 |
你那个函数里面n已经等于7了,所以你主体里面n要减2
#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; }
#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; }
#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:01:46 |
可以分为三个函数简化,输入、处理、输出。
点我有惊喜!你懂得!浏览:2705 |
C语言训练-求素数问题 (C语言代码)浏览:953 |
WU-蓝桥杯算法提高VIP-Quadratic Equation (C++代码)浏览:1742 |
众数问题 (C语言代码)浏览:821 |
C语言程序设计教程(第三版)课后习题1.5 (C语言代码)浏览:586 |
1113题解浏览:784 |
核桃的数量 (C语言代码)浏览:668 |
罗列完美数 (C语言代码)浏览:491 |
C语言程序设计教程(第三版)课后习题10.5 (C语言代码)浏览:946 |
C语言程序设计教程(第三版)课后习题1.5 (C语言代码)浏览:539 |