原题链接:[编程入门]自定义函数之数字后移
解题思路:
①:设数组元素为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分
54 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
#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; }#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; }@余哥 scanf("%d",a[i]) 这个语句中少了个“&”大佬们,我这个为啥编译错误啊!! #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; }大佬求解,为什么这会答案出错? #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; }