#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<string.h>
#include<assert.h>
/*
void *memcpy(void *dest,const void *src,
int count
);
count:字节数
*/
void *Mymemcpy(void *dest,const void *src,int count )
{
while(count != 0)
{
*((char*)dest) = *((char*)src);
((char*)dest)++;
((char*)src)++;
count--;
}
}
void *Mymemmove(void *dest,const void *src, int count )
{
void *p = dest;
if(src > dest)
{
while(count != 0)
{
*((char*)dest) = *((char*)src);
((char*)dest)++;
((char*)src)++;
count--;
}
}
else
{
while(count--)
{
*((char*)dest+count)= *((char*)src+count);
//count--;
}
}
return p;
}
void *Mymemmove2(void *dest,void *src,int count)
{
void *ret = dest;
if(dest < src)
{
while(count--)
{
*(char*)dest = *(char *)src;
((char*)dest)++;
((char*)src)++;
}
}
else
{
while(count--)
{
*((char*)dest+count) = *((char*)src+count);
}
}
return ret;
}
int main()
{
int arr[] = {1,2,3,4,5,6,7};
int arr2[10] = {0};
Mymemmove(arr+2,arr,16);
//Mymemcpy(arr,arr+2,16);
//内存拷贝函数
//int*p = (int *)memcpy(arr2,arr,16);
//int i = 0;
//for(i = 0;i < 10;i++)
//{
// printf("%d ",p[i]);//*(p+i)
//}
return 0;
}
#if 0
char *Mystrcpy(char *dest,const char *src)
{
/*char *p = dest;
while(*src != '\0')
{
*dest = *src;
dest++;
src++;
}
*dest = '\0';
return p; 0' '\0' 0 NULL*/
char *p = dest;
while(*dest++ = *src++){}
return p;
}
char *Mystrcat(char *dest,const char *src)
{
char *p = dest;
assert(dest!= NULL && src != NULL);
while(*dest != '\0')
{
dest++;
}
//dest指向了\0
while(*dest++ = *src++){}
return p;
}
//
char *Mystrncat(char *dest,const char *src,int n)
{
return NULL;
}
char *Mystrncpy(char *dest,const char *src,int n)
{return NULL;}
const char *Mystrstr1 (const char *str1,const char *str2 )
{
while(*str1 != '\0')
{
const char *p = str1;
while(*str1!= '\0' && *str2 != '\0'&&*str1 == *str2)
{
str1++;
str2++;
}
if(*str1 == '\0')
{
return NULL;
}
if(*str2 == '\0')
{
return p;
}
str1++;
}
return NULL;
}
//朴素算法-- KMP--
const char *Mystrstr (const char *str1,const char *str2 )
{
const char *s1 = NULL;
const char *s2 = NULL;
const char *start = str1;
while(*start != '\0')
{
s1 = start;//s1回退到上一次的下一个位置
s2 = str2;//s2回退到str2的起始位置
while(*s1!= '\0' && *s2 != '\0'&&*s1 == *s2)
{
s1++;
s2++;
}
if(*s1 == '\0')
{
return NULL;
}
if(*s2 == '\0')
{
return start;
}
start++;
}
return NULL;
}
const char *Mystrchr(const char *src,char ch)
{
while(*src != '\0')
{
if(*src == ch)
{
return src;
}
src++;
}
return NULL;
}
//str1和str2比较
int Mystrncmp(const char *str1, const char *str2,int n)
{}
int Mystrcmp(const char *str1, const char *str2)
{
//ab abc abc ab
while(*str1 == *str2)
{
if(*str1 == '\0')
{
return 0;
}
str1++;
str2++;
}
if(*str1 > *str2)
{
return 1;
}
else
{
return -1;
}
}
int main()
{
char *dest= "abc";//主串
char *src = "abc";//子串
printf("%d\n",strncmp("abcd","abcd",3));//0
printf("%d\n",strncmp("abde","abce",1));//0
printf("%d\n",strncmp("abce","adcd",3));//-1
//printf("%s\n",Mystrstr(dest,src));
//printf("%s\n",strncpy(dest,src,6));
//printf("%s\n",strncat(dest,src,3));
return 0;
}
int main()
{
int money = 0;
int empty = 0;
int total = 0;
scanf("%d",&money);
total = money;
empty = money;
while(empty > 1)
{
total += empty/2;
empty = empty/2+empty%2;
}
printf("%d\n",total);
return 0;
}
void Fun(int *px,int *py)
{
}
int main()
{
int x =0;
int y = 0;
Fun(&x,&y);
return 0;
}
int main()
{
int arr[] = {2,4,3,6,3,2,5,5};
int len = sizeof(arr)/sizeof(arr[0]);
//1、异或数组中的所有数字
int i = 0;
int num = 0;
int pos = 0;//pos用来保存第i位为1的位置
int x = 0;
int y = 0;
for(i = 0;i < len;i++)
{
//num = num^arr[i];
num ^= arr[i];
}
//2、num肯定是异或的结果。
//--->找到num二进制第一位为1的位数
for(i = 0;i < 32;i++)
{
if(((num>>i) & 1) == 1)
{
pos = i;
break;
}
}
//3、遍历数组,分为两个子数组
for(i = 0;i < len;i++)
{
if(((arr[i]>>pos) & 1) == 1)
{
x ^= arr[i];
}
else
{
y ^= arr[i];
}
}
printf("%d,%d\n",x,y);
return 0;
}
#endif