解题思路:
①:设数组元素为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 <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; }
大佬们,我这个为啥编译错误啊!! #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; }
Dweiwei 2020-03-30 12:37:09 |
scanf("%d",a[i]) 这个语句中少了个“&”
大佬求解,为什么这会答案出错? #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){
#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; }
#include<stdio.h> #define N 50 void main() { int n,a[N]; scanf("%d",&n); for(int i=0;i<n;i++) scanf("%d",&a[i]); int m; scanf("%d",&m); for(int j=0;j<m;j++) { int t=a[j]; a[j]=a[n-m+j]; a[n-m+j]=t; } for(i=0;i<n;i++) printf("%d ",a[i]); printf("\n"); } 这样不是更简单吗?运行也没问题,为什么编译错误?有人帮我看看吗?谢谢
木头 2020-03-08 22:10:38 |
题意没理解对哦,哥们儿
#include<stdio.h> #include<string.h> #include<math.h> int main() { int n,a[n],m,t; scanf("%d",&n); for(int i=0; i<n; i++) { scanf("%d",&a[i]); } scanf("%d",&m); for(int i=0; i<m; i++) { t=a[n-1]; for(int j=n-1; j>0; j--) { a[j]=a[j-1]; } a[0]=t; } for(int i=0; i<n; i++) { printf("%d ",a[i]); } return 0; } 编译器编译没问题但提交就运行错误,有没有大佬看下哪里数组越界还是什么原因
KongBai 2019-11-27 10:47:20 |
int n,a[n] n是一个变量,而且这样命名不好
循环入门练习6 (C语言代码)浏览:953 |
数组输出 (C语言代码)浏览:700 |
C语言程序设计教程(第三版)课后习题7.5 (C语言代码)浏览:548 |
C语言程序设计教程(第三版)课后习题8.1 (C语言代码)浏览:713 |
简单的a+b (C语言代码)浏览:434 |
C二级辅导-公约公倍 (C语言代码)浏览:1310 |
C语言程序设计教程(第三版)课后习题1.5 (C++代码)浏览:403 |
C语言程序设计教程(第三版)课后习题1.5 (C语言代码)浏览:489 |
C二级辅导-阶乘数列 (C语言代码)浏览:660 |
金额的中文大写浏览:3480 |