0

我试图在不使用任何第二个数组的情况下反转一个数组。这是我编写的代码,但由于某种原因,它似乎不起作用。

#include<stdio.h>
#include<conio.h>
void getarrayvalues();
void main()
{
 int k,n;
 int i=0;
 int a[100];
 printf("Enter the value of n");
 scanf("%d", &n);
 printf("Ener the values of array");
 for(i=0;i<n;i++)
 {
   scanf("%d", &a[i]);
 }
 k=n;
 if(n%2==0)
 {
   for(i=0;i<n;i++)
   {
      a[i]=a[k];
      k--;
   }
 }
 else
 {
   for(i=0;i<n;i++)
   {
     if(k==((n/2)+1))
     {
       continue;
     }
     else
     {
       a[i]=a[k];
       k--;
     }
   }
 }
 printf("reverse values are");
 for(i=0;i<n;i++)
 {
  printf("%d", a[i]);
 }
}

输入数组值后,返回蓝色代码编写屏幕,不打印输出。有任何想法吗 ?

4

5 回答 5

3

我看到的第一个错误是您kn. 好吧,n数组a的位置在最后一个元素之后,因为数组索引从零开始。你应该开始它:

k=n-1;

第二,当你做

for(i=0;i<n;i++)
{
   a[i]=a[k];
   k--;
}

您用反转的后半部分覆盖数组的前半部分,但在此过程中会丢失前半部分的原始值。如果您不保存a[i]其他地方的先前值,它将被赋值丢失。放置值的好地方a[i]是,因为您正在反转数组,在其对称的相反位置,恰好是a[k]。代码如下所示:

for(i=0;i<n;i++)
{
   int temp = a[i];
   a[i]=a[k];
   a[k]=temp;
   k--;
}

但是这样做时i == n/2,您已经交换了整个数组,因此您必须停在那里:

for(i=0;i<=(n/2);i++)
{
   int temp = a[i];
   a[i]=a[k];
   a[k]=temp;
   k--;
}

最后,没有必要区别对待n奇数或偶数的情况,因为如果它是奇数,中间元素将已经在它需要的位置......

于 2013-09-20T19:17:20.280 回答
1

您只分配 a[i] 值。您还需要分配 a[k] 值。例如 :

int temp;

//code

temp = a[i];
a[i] = a[k];
a[k] = temp;

您现在基本上是在复制数组的值。

编辑

你也应该看看 ivella 说了什么。如果您不考虑这一点,您最终将访问空内存(您的程序将崩溃)

于 2013-09-20T19:16:23.037 回答
1

就这样做——

for(i=0;i<n/2;++i)
swap(a+i,a+((n-1)-i));

其中 swap(&x,&y) 交换变量 x 和 y 的值。

于 2013-09-20T19:19:24.533 回答
0

您似乎使用的是 C,而不是 C++。您可以在没有第二个数组的情况下完成反转,如下所示:

int array[SIZE];
// fill in array
for (int i = 0; i < SIZE / 2; ++i)
{
    int t = array[i];
    array[i] = array[SIZE - i - 1];
    array[SIZE - i - 1] = t;
}

C++ 解决方案可以根据要求以几种方式完成。例如:

std::vector<int> v = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
std::reverse(v.begin(), v.end());
于 2013-09-20T19:17:57.497 回答
0
#include<stdio.h>
int main()
{
    char s[]="ratiranjankumar";
    int i,j;
    int count=0;

    for(i=0;s[i]!='\0';i++)
    {
        count++;
    }

    for(j=0;j<=count/2-1;j++)
    {
        s[j] ^= s[count-j];
        s[count-j] ^= s[j];
        s[j] ^= s[count-1];
    }

    for(i=0;i<=count;i++)
    {
        printf("%c",s[i]);
    }
}   
于 2018-02-22T19:06:13.380 回答