我的功能正在进入无限循环。问题是要反转数组的前n个整数:数组{2,4,1,3}
将反转为{4,2,1,3}
,因为第一个数字是2,它会切换前2个数字等等。
有什么想法吗? :)
我的代码:
int *reverse(int *arr,int n)
{
int w;
int q=arr[0]-1;
int first_value = arr[0];
for(w=0; w<=first_value; w++)
{
arr[w] = arr[q];
q--;
}
return (arr);
}
答案 0 :(得分:1)
int *reverse(int *arr,int n){
int i, temp;
for(i = 0; i < --n ; i++){
temp = arr[i];
arr[i] = arr[n];
arr[n] = temp;
}
return arr;
}
答案 1 :(得分:1)
您尝试反转子阵列两次,但无法交换元素并向前迈出一步。你应该停在阵列的中间位置:
int *reverse(int *arr, int n) {
int w, q = arr[0];
if (q > n) {
/* handle this error! */
return NULL;
}
for (w = 0; w < --q; w++) {
int e = arr[w];
arr[w] = arr[q];
arr[q] = e;
}
return arr;
}
答案 2 :(得分:-1)
这是反转前n个数字的代码
#include <stdio.h>
int main(){
int arr [10] = {5,2,3,4,5,6,7,8,9,10};
int i,n=arr[0];
for (i=0; i<n--; ++i){
int temp = arr[i];
arr[i]=arr[n];
arr[n] = temp;
}
for (i=0; i<10; ++i){
printf("%d ",arr[i]);
}}