1、有一個字符數組A[6]=“ABCDE”,把它的存儲狀態變爲A[6]=“EDCBA”,不要另外用多的存儲空間;
#include <stdio.h>
#include <string.h>
int main()
{
char buf[]="abcde";
int i = 0;
int j = strlen(buf);
for(i = 0;i<j/2;i++)
{
buf[i]^=buf[j-1];
buf[j-1]^=buf[i];
buf[i]^=buf[j-1];
j--;
}
buf[strlen(buf)]='\0';
printf("%s\n",buf);
return 0;
}
通過異或操作實現兩個數的交換
2、有一個整型數組A[n]=[*,*,*,*,*,*],把奇數放在數組的前面,它的複雜度保證在O(n);
#include <stdio.h>
int main()
{
int a[]={1,3,4,3,5,6,8};
int i;
int j = 0;
int end = sizeof(a)/4;
j = end--;
int temp;
j--;
for(i=0;i!=j;)
{
if(a[i]%2==0)
i++;
else if(a[j]%2!=0)
j--;
else {
temp=a[i];
a[i]=a[j];
a[j]=temp;
}
printf("j = %d end = %d i=%d \n",j,end,i,a[i]);
}
for(i = 0;i<sizeof(a)/4; i++)
{
printf("%d ",a[i]);
}
printf("\n");
return 0;
}
從前遍歷找奇數,從後遍歷找偶數,找到就互換位置,i==j結束