[c语言]codeday15找出数组中出现一次的两个值以及喝汽水模拟实现strcpy和

1.一个数组中只有两个数字是出现一次,
其他所有数字都出现了两次。
找出这两个数字,编程实现

#include<stdio.h>
void find(int arr[],int len,int *m,int *n)
{
	int s = 0;
	int i = 0;
	int j = 0;
	int k = 0;
	for(i=0; i<len; i++)
	{
		s ^=arr[i];
	}
	for(k=1;;k = k << 1)
	{
		if(((k & s) != 0))
		{
			break;
		}
	}
	for(j=0; j<len; j++)
	{
		if((arr[j] & k) != 0)
		{
			*m ^= arr[j];
		}
	}
	*n = s^*m;
}
int main()
{
	int arr[10] = {1,1,2,3,3,4,4,5,7,7};
	int len = sizeof(arr)/sizeof(arr[0]);
	int m = 0;
	int n = 0;
	find(arr,len,&m,&n);
	printf("%d,%d",m,n);
	return 0;
}

2.喝汽水,1瓶汽水1元,2个空瓶可以换一瓶汽水,
给20元,可以多少汽水。
编程实现。

#include<stdio.h>
int drink_sodawater(int total)
{
	int bottle = total;//初始总瓶数
	int remainder = 0;//余数
	while(bottle > 1)
	{
		total += bottle / 2;
		remainder = bottle % 2;
		bottle = bottle/2 + remainder;
	}
	return total;
}
int main()
{
	int money;
	printf("请输入钱数:>");
	scanf("%d",&money);
	printf("能喝%d瓶\n",drink_sodawater(money));
	return 0;
}

3.模拟实现strcpy

#include<stdio.h>
#include<assert.h>
char *my_strcpy(char *dest,const char *str)
{
	char *p = dest;
	assert(dest);
	assert(str);
	while(*dest++ = *str++)
	{
		;
	}
	return p;
}
int main()
{
	char *arr1 = "abcdefg";
	char arr2[10] = {0};
	my_strcpy(arr2,arr1);
	printf("%s\n",arr2);
	return 0;
}

4.模拟实现strcat

#include<stdio.h>
#include<assert.h>
char *my_strcat(char *dest,const char *str)
{
	char *p = dest;
	assert(dest);
	assert(str);
	//跳到最后一个字符
	while(*dest != '\0')
	{
		dest++;
	}
	//拷贝
	while(*dest++ = *str++)
	{
		;
	}
	return p;
}
int main()
{
	char arr1[30] = "i am a";
	char arr2[30] = " student";
	my_strcat(arr1,arr2);
	puts(arr1);
	return 0;
}

猜你喜欢

转载自blog.csdn.net/Code_beeps/article/details/83719386
今日推荐