第一次发布,如果我的问题没有遵循准则,我很抱歉,但是欢迎对我的问题和发布问题的任何反馈意见:)!
我正在研究一个问题,该问题要求编写一个带有两个参数的递归void函数:一个数组和一个整数计数n,该函数将数组中的前n个整数向左旋转。
所以输入看起来像这样:
5 10 20 30 40 50
输出:
50 40 30 20 10
我使用递归编写了rotate函数,它似乎按预期工作。
#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
其他时候代码只是运行并且永不停止,我不得不强迫它停止。
在这一点上,我碰壁了,很肯定,问题出在我的主要职责范围之内,但是我想去哪里碰壁。在过去的五年中,我没有编码经验,所以我非常不习惯。
感谢您的帮助和指导!
答案 0 :(得分:0)
使用v-model.number="mAlarmValue"
编译时答案中的代码可以正常工作(并输入gcc
小于或等于5,否则n
方法将超出数组限制)。
由于使用rotateLeft
的标准输入似乎无法正常工作,因此可能是与程序的构建方式有关的问题(它可能应该是Win32或Win64子系统:控制台应用程序,链接:{{ 3}})。
答案 1 :(得分:0)
#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