1. 一个数组中只有两个数字是出现一次, 其他所有数字都出现了两次。 找出这两个数字,编程实现。2. 喝汽水,1瓶汽水1元,2个空瓶可以换一瓶汽水,给20元,可以买多少汽水。

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

思路:先排序,因为其他数都是成对出现的,所以当某个数的前面和后面都和这个数不相等时,这个数就是单独出现的

#include<stdio.h>

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

void find(int arr[10],int num)
{
	//先将其按从小到大排序
	for (int i = 0; i < num; i++)
	{
		for (int j = i + 1; j < num; j++)
		{
			if (arr[i] > arr[j])
			{
				int temp = arr[i];
				arr[i] = arr[j];
				arr[j] = temp;
			}
		}
	}
	//提取
	for (int i = 0; i < num; i++)
	{
		if (i == 0)
		{
			if (arr[i] != arr[i + 1]) 
			{
				printf("%d", arr[i]);
			}
		}
		else if(i == num)
		{
			if (arr[i - 1] != arr[i])
			{
				printf("%d", arr[i]);
			}
		}
		else
		{
			if (arr[i] != arr[i + 1] && arr[i - 1] != arr[i])
			{
				printf("%d\t", arr[i]);
			}
		}
	}
}

int main()
{
	int arr[] = { 9,0,1,2,3,2,5,6,6,1,0 };
	int num = sizeof(arr) / sizeof(arr[0]);
	find(arr,num);
	return 0;
}

喝汽水,1瓶汽水1元,2个空瓶可以换一瓶汽水,
给20元,可以买多少汽水

思路:当手里只剩下一个空瓶或者没空瓶则购买结束

#include<stdio.h>
/*> 2. 喝汽水,1瓶汽水1元,2个空瓶可以换一瓶汽水, 
>    给20元,可以买多少汽水。*/

int main()
{
	int num = 0, money = 20, count = 0;//汽水数,钱,空瓶数
	num = count = money;
	while (count>1)
	{
		num += count / 2;
		if (count & 1)
		{
			count = count / 2 + 1;
		}
		else
		{
			count /= 2;
		}
	}
	printf("%d", num);
	return 0;
}
发布了57 篇原创文章 · 获赞 96 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/weixin_44840572/article/details/103308717