我有一系列数字,我试图扭转。我相信我的代码中的函数是正确的,但我无法得到正确的输出。
输出结果为:10 9 8 7 6。 为什么我不能得到另一半的数字?当我从计数中删除“/ 2”时,输出显示为:10 9 8 7 6 6 7 8 9 10
void reverse(int [], int);
int main ()
{
const int SIZE = 10;
int arr [SIZE] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
reverse(arr, SIZE);
return 0;
}
void reverse(int arr[], int count)
{
int temp;
for (int i = 0; i < count/2; ++i)
{
arr[i] = temp;
temp = arr[count-i-1];
arr[count-i-1] = arr[i];
arr[i] = temp;
cout << temp << " ";
}
}
答案 0 :(得分:20)
这将是我的方法:
#include <algorithm>
#include <iterator>
int main()
{
const int SIZE = 10;
int arr [SIZE] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
std::reverse(std::begin(arr), std::end(arr));
...
}
答案 1 :(得分:16)
该行
arr[i] = temp;
错了。 (在循环的第一次迭代中,它将arr[i]
设置为未定义的值;进一步的迭代将其设置为不正确的值。)如果删除此行,则应正确反转数组。
之后,您应该将打印反转数组的代码移动到一个新循环中,该循环遍历整个列表。您当前的代码仅打印第一个count/2
元素。
int temp, i;
for (i = 0; i < count/2; ++i) {
temp = arr[count-i-1];
arr[count-i-1] = arr[i];
arr[i] = temp;
}
for (i = 0; i < count; ++i) {
cout << arr[i] << " ";
}
答案 2 :(得分:3)
这两个答案对我来说都是正确的。
1)应删除第一个arr[i] = temp;
2)你应该做第二个循环来打印所有元素,而不仅仅是数组的一半。反向循环不需要打印它。
答案 3 :(得分:2)
您没有打印数组,而是打印temp
的值 - 这只是数组的一半......
答案 4 :(得分:1)
作为您问题的直接答案:您的交换错误
void reverse(int arr[], int count){
int temp;
for(int i = 0; i < count/2; ++i){
arr[i] = temp; // <== Wrong, Should be deleted
temp = arr[count-i-1];
arr[count-i-1] = arr[i];
arr[i] = temp;
}
}
分配arr[i] = temp
会在首次进入循环时导致错误,因为temp最初包含垃圾数据并且会破坏您的数组,删除它并且代码应该运行良好。
作为建议,尽可能使用内置函数:
std::swap(arr[i], arr[count-i-1])
std::reverse(arr, arr+count)
我正在使用C ++ 14并且反向使用数组没有任何问题。
答案 5 :(得分:1)
首先,您在这段代码中有什么价值? int temp;
?您无法确定,因为在每个编译中它将具有不同的值-您应该初始化您的值以使其不具有来自内存的垃圾值。下一个问题是:为什么将这个温度值分配给数组?
如果您想坚持使用您的解决方案,我将更改反向功能,如下所示:
void reverse(int arr[], int count)
{
int temp = 0;
for (int i = 0; i < count/2; ++i)
{
temp = arr[count - i - 1];
arr[count - i - 1] = arr[i];
arr[i] = temp;
}
for (int i = 0; i < count; ++i)
{
std::cout << arr[i] << " ";
}
}
现在可以使用,但是您还有其他选择可以解决此问题。
使用指针的解决方案:
void reverse(int arr[], int count)
{
int* head = arr;
int* tail = arr + count - 1;
for (int i = 0; i < count/2; ++i)
{
if (head < tail)
{
int tmp = *tail;
*tail = *head;
*head = tmp;
head++; tail--;
}
}
for (int i = 0; i < count; ++i)
{
std::cout << arr[i] << " ";
}
}
像卡洛斯·亚伯拉罕(Carlos Abraham)这样的官员说,要在algorithm
库中使用内置函数
答案 6 :(得分:1)
我将使用reverse()
库中的<algorithm>
函数。
在线运行:repl.it/@abranhe/Reverse-Array
#include <iostream>
#include <algorithm>
using namespace std;
int main()
{
int arr [10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
reverse(begin(arr), end(arr));
for(auto item:arr)
{
cout << item << " ";
}
}
输出:
10 9 8 7 6 5 4 3 2 1
希望您喜欢这种方法。
答案 7 :(得分:1)
这个问题的解决方案非常简单:向量
std::vector<int> vector;
for(int i = 0; i < 10;i++)
{
vector.push_back(i);
}
std::reverse(vector.begin(), vector.end());
瞧!你完成了! =)
解决方案详情:
这是最有效的解决方案:交换不能交换3个值,但绝对可以反转。 请记住包含算法。 这很简单,绝对不需要编译代码。
我认为这解决了OP的问题
如果您认为此解决方案存在任何错误和问题,请在下面发表评论
答案 8 :(得分:1)
void reverse(int [], int);
void printarray(int [], int );
int main ()
{
const int SIZE = 10;
int arr [SIZE] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
cout<<"Before reverse\n";
printarray(arr, SIZE);
reverse(arr, SIZE);
cout<<"After reverse\n";
printarray(arr, SIZE);
return 0;
}
void printarray(int arr[], int count)
{
for(int i = 0; i < count; ++i)
cout<<arr[i]<<' ';
cout<<'\n';
}
void reverse(int arr[], int count)
{
int temp;
for (int i = 0; i < count/2; ++i)
{
temp = arr[i];
arr[i] = arr[count-i-1];
arr[count-i-1] = temp;
}
}
答案 9 :(得分:0)
#include<bits/stdc++.h>
using namespace std;
int main()
{
int n;
cin>>n;
int *arr = new int[n];
for(int i=0; i<n; i++) cin>>arr[i];
reverse(arr, arr+n);
for(int i=0; i<n; i++) cout<<arr[i]<<" ";
delete[] arr;
return 0;
}
C ++实现:
{{1}}
答案 10 :(得分:0)
首先,您将temp分配给数组元素,然后删除arr[i] = temp;
个参数。接下来的问题是你正在打印temp变量,它只显示一半的数组元素(在你的for循环中)。如果您不想使用STL向量,我建议使用此解决方案:
#include <iostream>
void reverseArray(int userArray[], int size);
void printArray(int userArray[], int size);
int main(int arg, char**argv) {
int arr[]{ 1,2,3,4,5,6,7,8,9,10 };
int sizeOfArray = sizeof(arr) / sizeof(arr[0]);
reverseArray(arr, sizeOfArray);
printArray(arr, sizeOfArray);
system("pause");
return(0);
}
void reverseArray(int userArray[], int size) {
int* ptrHead = userArray;
int* ptrTail = userArray + (size-1);
while (ptrTail > ptrHead) {
int temp = *ptrHead;
*ptrHead = *ptrTail;
*ptrTail = temp;
ptrHead++;
ptrTail--;
}
}
void printArray(int userArray[], int size) {
for (int i = 0; i < size; i++) {
std::cout << userArray[i] << " ";
}
}
答案 11 :(得分:0)
您的循环只会运行count/2
次。所以它不会打印整个数组。
此外,应使用temp=ar[i]
而不是ar[i]=temp
,因为ar[i]
的值未被存储在后一个语句中的任何位置,因此它将被销毁。
答案 12 :(得分:0)
for(i=0;i<((s3)/2);i++)
{
z=s2[i];
s2[i]=s2[(s3-1)-i];
s2[(s3-1)-i]=z;
}
答案 13 :(得分:0)
我会尝试使用指针来解决这个问题。我的代码如下。
#include <iostream> void displayArray(int table[], int size); void rev(int table[], int size); int main(int argc, char** argv) { int a[10] = { 1,2,3,4,5,6,7,8,9,10 }; rev(a, 10); displayArray(a, 10); return 0; } void displayArray(int table[], int size) { for (int i = 0; i < size; i++) { std::cout << table[i] << " "; } std::cout << std::endl; } void rev(int table[], int size) { int *start = table; int *end = table + (size - 1); for (int i = 0; i < size; i++) { if (start < end) { int temp = *end; *end = *start; *start = temp; } start++; end--; } }
答案 14 :(得分:0)
#include "stdafx.h"
#include <iostream>
using namespace std;
void main()
{
int n, i;
cout << "n = ";
cin >> n;
int *a = new int[n];
int *b = new int[n];
for (i = 0; i < n; i++)
{
cout << "a[" << i << "]= ";
cin >> a[i];
}
for (i = 0; i < n; i++)
{
b[i] = a[n - 1 - i];
}
for (i = 0; i < n; i++)
{
cout << b[i];
}
}
答案 15 :(得分:0)
我的方法是交换数组的第一个和最后一个元素
int i,j;
for ( i = 0,j = size - 1 ; i < j ; i++,j--)
{
int temp = A[i];
A[i] = A[j];
A[j] = temp;
}
答案 16 :(得分:-2)
您可以使用下面的示例来反转数组中的内容:
#include <iostream>
int main()
{
int n, x;
// order value for var x
cin >> x;
// create array and the value for array is value var x
int arr[x];
// loop for insert values for array by reverse
for(int i=x; i > 0; i--) {
// var i is number of elements in array
cin >> n;
arr[i - 1] = n;
}
// show element in array
for(int l = 0; l < x; l++) {
cout<<arr[l]<<endl;
}
return 0;
}
答案 17 :(得分:-4)
尝试这个可以比其他代码更好地下降。
using namespace std;
int main() {
int a[5]={4,6,3,5,9};
for(int i=4;i>=0;i--) {
cout<<"\n"<<a[i];
}
}