1.一个数组中有2个数字是出现一次,其他所有数字出现了2次。找出这两个出现一次的数字,编程实现。
#include<stdio.h>
#include<stdlib.h>
int main()
{
int arr[] = { 1, 2, 3, 4, 1, 2, 3, 5 };
int x = 0;
int y = 0;
int pos = 0;
int tmp = 0;
int i = 0;
int sz = sizeof arr / sizeof arr[0];
for (i = 0; i < sz; i++)
{
tmp = tmp^arr[i];
}
for (i = 0; i < 32; i++)
{
if (((tmp >> i) & 1) == 1)
{
pos = i;
break;
}
}
for (i = 0; i < sz; i++)
{
if (((arr[i] >> pos) & 1) == 1)
{
x = x^arr[i];
}
else
{
y = y^arr[i];
}
}
printf("%d %d",x,y);
system("pause");
return 0;
}
2.喝汽水,1瓶汽水1元,2个空瓶子可以换一瓶汽水
求:可以喝多少瓶
#include<stdio.h>
#include<stdlib.h>
int main()
{
int money = 20;
int total = money;
int empty = total;
while (empty >= 2)
{
total += empty / 2;
empty = empty / 2 + empty % 2;
}
printf("你可以喝%d瓶水\n", total);
system("pause");
return 0;
}
3.模拟实现strcpy(字符串拷贝库函数)
#include<stdio.h>
#include<stdlib.h>
#include<assert.h>
char *Mystrcpy(char*dest, const char *src)
{
char*p = dest;
assert(dest != NULL && src != NULL);
while (*dest++ = *src++);
return p;
}
int main()
{
char dest[20] = {0};
char*src = "hello";
Mystrcpy(dest, src);
printf("%s\n", dest);
system("pause");
return 0;
}
4.模拟实现strcat(字符串连接函数)
#include<stdio.h>
#include<stdlib.h>
#include<assert.h>
#include<string.h>
char *Mystrcat(char *dest, const char *src)
{
char *p = dest;
assert(dest != NULL && src != NULL);
while (*dest != '\0')
{
dest++;
}
while (*dest++ = *src++);
return p;
}
int main()
{
char dest[30] = "hello ";
char *src = "tianjia";
Mystrcat(dest, src);
printf("%s\n", dest);
system("pause");
return 0;
}