第一次发帖,如果我的问题没有遵循指南,我深表歉意,但欢迎对我的问题和发布问题的任何反馈:)!
我正在解决一个问题,需要编写一个带有两个参数的递归 void 函数,一个数组和一个整数计数 n,它将数组中的前 n 个整数向左旋转。
所以输入看起来像这样:
5 10 20 30 40 50
输出:
50 40 30 20 10
我已经使用递归编写了旋转函数,它似乎按预期工作。
#include <stdio.h>
void rotateLeft(int y[], int n){
int temp;
if (n > 1){
temp = y[0];
y[0] = y[1];
y[1] = temp;
rotateLeft(y + 1, n - 1);
}
}
int main(void){
int y[5];
int n;
int i = 0;
//input number from user
printf("Enter 'Count' number and 'elements' into array: ");
scanf("%d", &n);
for (i = 0; i < 5; i++){
scanf("%d", &y[i]);
}
rotateLeft(y, n);
for ( size_t i = 0; i < sizeof( y ) / sizeof( *y ); i++ ) printf( "%d ", y[i] );
puts( "" );
return 0;
}
我正在使用Visual Code Studio,在尝试运行此代码时遇到了两个问题。第一个是它从不要求我的输入,它只会在指定的数组位置输出随机数,例如: 3345345 345456 564565 56 4564
其他时候代码只是运行并且永远不会停止,我必须强制它停止。
在这一点上,我已经碰壁了,并且肯定问题出在我的主要职能中,但是我已经在脑海中碰壁了,该去哪里。在过去的 5 年里,我已经没有编码了,所以我非常不练习。
答案中的代码在使用gcc
编译时工作正常(并输入小于或等于 5n
,否则rotateLeft
方法将超出数组限制)。
由于带有scanf
的标准输入似乎不起作用,因此可能是与程序构建方式相关的问题(它可能应该是win32或win64子系统:控制台应用程序,链接:Microsoft的/SUBSYSTEM描述)。
#include <stdio.h>
#include <stdlib.h>
//recursion
//a b c d e
//round-1
//e b c d a
//round-2
//e d c b a
void Rec_ReverseAr(int y[], int n,int max_n){
int temp;
if (max_n > n*2){
temp = y[max_n-n-1];
y[max_n-n-1] = y[n];
y[n] = temp;
Rec_ReverseAr(y, n+1,max_n);
}
}
//inplace
void Better_ReverseAr(int y[],int max_n){
int Upper=max_n/2,i,temp;
for (i = 0; i < Upper; i++){
temp = y[max_n-i-1];
y[max_n-i-1] = y[i];
y[i] = temp;
}
}
int main(){
int *y;
int n;
int i = 0;
//input number from user
printf("Enter 'Count' number and 'elements' into array: ");
scanf("%d", &n);
if(n<1){//prevent nagtive int
printf("Hey You Enter Wrong Number!n");
return 0;
}
y=(int*)malloc(sizeof(int)*n);//alloc amount n of int for y
for (i = 0; i < n; i++){
scanf("%d", &y[i]);
}
Rec_ReverseAr(y,0,n);
//Better_ReverseAr(y,n);
for (i = 0; i < n; i++ ){
printf( "%d ", y[i] );
}
free(y);//release memory of y
return 0;
}
给你
your function
void rotateLeft(int y[], int n){
int temp;
if (n > 1){
temp = y[0];
y[0] = y[1];
y[1] = temp;
rotateLeft(y + 1, n - 1);
}
}
0.a b c d e f
1.*b a* c d e f
2.b *c a* d e f
3.b c *d a* e f
...
is wrong