一组数据中只有一个数字出现了一次。
其他所有数字都是成对出现的。
请找出这个数字。(使用位运算)
【解题思路】0异或任何数字都等于数字本身。相同数字异或为零
int Seek_num(int arr[],int len)
{
int ret = 0;
for (int i = 0; i < len; i++)
{
ret = ret^arr[i];
}
return ret;
}
int main()
{
int arr[] = { 2, 2, 3, 4, 5, 7, 3, 5, 4 };
int len = 0;
len = sizeof(arr) / sizeof(arr[0]);
printf("%d\n",Seek_num(arr,len));
system("pause");
return 0;
}
有一个字符数组的内容为:“student a am i”,
请你将数组的内容改为"i am a student".
要求:
不能使用库函数。
只能开辟有限个空间(空间个数和字符串的长度无关)。
//i ma a tneduts
void Reversed_Num(char* arr)
{
char* start = arr;
char* end = arr;
while (*end != '\0')
{
++end;
}
--end;
while (start < end)
{
char temp = *start;
*start = *end;
*end = temp;
++start;
--end;
}
}
void Reversed(char* arr)
{
while (*arr != '\0')
{
char* start = arr;
char* end = arr;
while (*end != ' '&&*end != '\0')
{
end++;
}
--end;
while (start < end)
{
char temp = *start;
*start = *end;
*end = temp;
++start;
--end;
}
while (*arr != ' '&&*arr != '\0')
{
++arr;
}
if (*arr != '\0')
{
++arr;
}
}
}
int main()
{
char arr[] = "student a am i";
printf("%s\n", arr);
Reversed_Num(arr);
printf("%s\n", arr);
Reversed(arr);
printf("%s\n", arr);
system("pause");
return 0;
}