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

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

#include <stdio.h>
#include <stdlib.h>
int main()
{
	int arr[] = {4, 8, 8, 4, 5, 9, 3, 5};
	int count = 0;
	int sz = sizeof(arr)/sizeof(arr[0]) - 1;
	int i = 0, j = 0;
	for (i=0; i<sz; i++)
	{
		count = 0;
		for (j=0; j<sz+1; j++)
		{
			if (arr[i] == arr[j])
			{
				count ++;
			}

		}
		if (count == 1)
		{
			printf("%d ", arr[i]);
		}
	}
	system ("pause");
	return 0;
}
/*
运行结果:
9 3 请按任意键继续. . .
*/

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

//喝汽水,1瓶汽水1元,2个空瓶可以换一瓶汽水,给20元,可以多少汽水。编程实现。
#include <stdio.h>
#include <stdlib.h>

int num (int n)
{
	if (n != 0)//零元返回零瓶
	{
		if (n != 1)//一元返回一瓶
		{
			if (n%2 == 0)//偶数
			{
				return n + num(n/2);//偶数直接返回第n行的个数加第n-1行的个数

;
			}
			else//奇数
			{
				return (n - 1) + num((n/2) + 1);//奇数时吧第n行余下的一个挪到第n-1行,按n-1行的进行计算
			}
		}
		else
		{
			return 1;
		}
	}
	else
	{
		return 0;
	}
}

int main()
{
	int n = 0;
	printf ("请输入钱数:\n");
	scanf ("%d", &n);
	printf ("%d元可以喝%d瓶汽水!!\n", n, 2*n-1);//方法一:找规律,规律刚好是n元钱能喝2*n-1瓶水;
	printf ("%d元可以喝%d瓶汽水!!\n", n, num(n));//方法二:用递归的方法计算;
	system ("pause");
	return 0;
}
/*
运行结果:
请输入钱数:
20
20元可以喝39瓶汽水!!
20元可以喝39瓶汽水!!
请按任意键继续. . .
*/

3.模拟实现strcpy

//strcpy(s1, s2)函数的意思是:把字符串s2拷贝到s1中,连同字符串结束标志也一同拷贝。
#include <stdio.h>
#include <stdlib.h>
#include <assert.h>

char* my_strcpy(char* dest, const char* str)
{
	const char* ret = str;
	assert (str);
	while (*dest++ = *str++)
	{
		;
	}
	*dest = *str;//最后把‘\0’赋给*dest
}

int main ()
{
	char arr1[] = "abcde";
	char arr2[10] = {'0'};

	my_strcpy (arr2, arr1);
	printf ("%s\n", arr2);

	system ("pause");
	return 0;
}
/*
运行结果:
abcde
请按任意键继续. . .
*/

4.模拟实现strcat

//char *strcat(char *dest, const char *str);
//strcat() 会将参数 str 字符串复制到参数 dest 所指的字符串尾部;
//dest 最后的结束字符 NULL 会被覆盖掉,并在连接后的字符串的尾部再增加一个 NULL。

#include <stdio.h>
#include <stdlib.h>
#include <assert.h>

char* my_strcat (char* dest, const char* str)
{
	const char* ret = str;
	assert (str);
	while (*dest)//dest 指向'\0'
	{
		dest++;
	}
	while (*dest++ = *str++)//给dest从\0开始赋值,到str的\0时循环结束
	{
		;
	}
	*dest = *str;//*dest = '\0';
	return (char *)ret;
}
int main()
{
	char arr1[] = "fdaifnd";
	char arr2[10] = "bc";
	my_strcat (arr2, arr1);
	printf ("%s\n", arr2);
	system ("pause");
	return 0;
}
/*
运行结果:
bcfdaifnd
请按任意键继续. . .
*/
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值