反转数组(不使用第二个数组)

时间:2013-09-20 19:13:32

标签: c arrays

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

#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]);
 }
}

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

5 个答案:

答案 0 :(得分:3)

我看到的第一个错误是您将k作为n启动。那么,数组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奇数或偶数的情况,因为如果它是奇数,则中间元素已经是它需要的位置......

答案 1 :(得分:1)

您只需指定[i]值。您还需要指定[k]值。例如:

int temp;

//code

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

你现在基本上复制了数组的值。

修改

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

答案 2 :(得分:1)

就这样做 -

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

交换(&amp; x,&amp; y)交换变量x和y的值。

答案 3 :(得分: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 ++解决方案。 e.g:

std::vector<int> v = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
std::reverse(v.begin(), v.end());

答案 4 :(得分: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]);
    }
}