一个数组中只有两个数字是出现一次,其他所有数字都出现了两次。找出这两个数字,编程实现。
#include<stdio.h>
#include<stdlib.h>
void Find(int arr[], int sz, int *n1, int *n2)
{
int i = 0;
int ret = 0;
int pos = 0;
for (i = 0; i < sz; i++)
ret ^= arr[i];
for (i = 0; i < ret; i++)
{
if (((ret >> i)&1) == 1)
pos = i;
}
for (i = 0; i < sz; i++)
{
if (((arr[i] >> pos) & 1) == 1)
*n1 ^= arr[i];
}
*n2 = ret^*n1;
}
int main()
{
int arr[] = { 1, 2, 3, 4, 58, 6, 4, 1, 2, 3 };
int sz = sizeof(arr) / sizeof(arr[0]);
int n1 = 0;
int n2 = 0;
Find(arr, sz, &n1, &n2);
printf("%d %d\n", n1, n2);
system("pause");
return 0;
}
喝汽水,1瓶汽水1元,2个空瓶可以换一瓶汽水,给20元,可以多少汽水。编程实现。
最后可以得出:汽水=2*money-1
#include<stdio.h>
#include<stdlib.h>
int main()
{
int money = 0;
scanf("%d", &money);
int total = money;
int empty = money;
while (empty > 1)
{
total += empty / 2;
empty = empty / 2 + empty % 2;
}
printf("total=%d\n", total);
system("pause");
return 0;
}
模拟实现strcmp()
#include<stdio.h>
#include<stdlib.h.>
#include<assert.h>
int my_strcmp(const char *str1, const char *str2)
{
assert(str1&&str2);
while (*str1 == *str2)
{
if (*str2)
return 0;
str1++;
str2++;
}
if (*str1 > *str2)
return 1;
else
return -1;
}
int main()
{
char arr1[] = "abcdef";
char arr2[] = "abcdef";
int ret = my_strcmp(arr1, arr2);
if (ret == 0)
printf("arr1==arr2\n");
else if (ret > 0)
printf("arr1>arr2\n");
else
printf("arr1<arr2\n");
system("pause");
return 0;
}
模拟实现strcat()
#include<stdio.h>
#include<stdlib.h>
#include<assert.h>
char *my_strcat(char *dest, const char *src)
{
char *ret = dest;
assert(dest&&src);
while (*dest != '\0')
{
dest++;
}
while (*dest++ = *src++)
{
;
}
return ret;
}
int main()
{
char arr1[] = "abcd";
char arr2[] = "hhhh";
printf("%s\n", my_strcat(arr1, arr2));
system("pause");
return 0;
}