1.一个数组中只有两个数字是出现一次, 其他所有数字都出现了两次。
找出这两个数字,编程实现。
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
void find(int arr[], int sz, int *x, int *y)
{
int i = 0;
int j = 0;
for(i=0; i<sz; i++)
{
for(j=0; j<sz; j++)
{
if((arr[i] == arr[j]) && (i != j))
break;
}
if(j == sz)
{
*x = *y;
*y = arr[i];
}
}
}
int main()
{
int arr[] = {2,8,3,5,4,7,2,5,4,8};
int sz = sizeof(arr)/sizeof(arr[0]);
int x = 0;
int y = 0;
int i = 0;
find(arr, sz, &x, &y);
for(i=0; i<sz; i++)
{
printf("%d ",arr[i]);
}
printf("\n");
printf("只出现一次的是%d和%d\n",x,y);
return 0;
}
2.喝汽水,1瓶汽水1元,2个空瓶可以换一瓶汽水, 给20元,可以多少汽水。
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int num_soda(int n)
{
int sum = n;
int y = 0;
while(n)
{
if(n % 2 == 1)
{
y += 1;
}
sum += (n /= 2);
}
return sum+(y/2);
}
int main()
{
int n = 15;
printf("给%d元,可以喝%d瓶汽水\n",n,num_soda(n));
return 0;
}
3.模拟实现strcpy
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<assert.h>
char* my_strcpy(char *dest, const char *src)
{
char *ret = dest;
assert(dest != NULL);
assert(src != NULL);
while(*dest++ = *src++)
{
;
}
return ret;
}
int main()
{
char arr1[] = "abcdefg";
char arr2[10] = {0};
my_strcpy(arr2, arr1);
printf("%s\n",my_strcpy(arr2, arr1));
return 0;
}
4.模拟实现strcat
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include<assert.h>
#include <string.h>
char *my_strcat(char *dest, const char *src)
{
char *ret = dest;
assert(dest != NULL);
assert(src != NULL);
while(*dest)
{
dest++;
}
while(*src)
{
*dest = *src;
src++;
dest++;
}
return ret;
}
int main()
{
char a[30] = "tomorrow";
//附加字符串 char *strcat( char *strDestination, const char *strSource );
strcat(a," will be");
my_strcat(a," better!");
printf("%s\n",a);
return 0;
}