空瓶换水喝水问题?给一个数组,如何让奇数在前偶数在后?C语言从入门到入土(进阶篇)(算法篇p5)

Posted 原来45

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了空瓶换水喝水问题?给一个数组,如何让奇数在前偶数在后?C语言从入门到入土(进阶篇)(算法篇p5)相关的知识,希望对你有一定的参考价值。

题一:喝水问题,一块钱可以换1瓶水,2个空瓶可以换1瓶水,给你对应的钱数求能喝的水数:

int main()

	int money = 0;//钱
	int total = 0;//喝水瓶
	int empty = 0;//空瓶
	scanf("%d", &money);
	total += money;
	empty += total;

	while (empty > 1)
	
		total += empty/2;
		empty = empty / 2 + empty % 2;
	
	printf("%d", total);
	return 0;

当然也可以另一种方法,我们可以发现一个规律,喝水数是2monney-1瓶,可以按这个直接写公式。

题二:给你一个数组,如何让奇数排在前面,偶数排在后面?

//奇数在前面 偶数在后面
void print(int arr[], int sz)

	for (int i = 0; i < sz; i++)
	
		printf("%d", arr[i]);
	
	printf("\\n");


void move(int* left, int sz)

	int* right = left + sz - 1;
	while (left < right)
	
		while (((*left) % 2 != 0) && (left < right))  //找是不是偶数                                                   
		
			left++;
		
		while (((*right) % 2 == 0) && (left < right)) //找是不是奇数
 		
			right--;
		
//注意都要写left<right,小心越界以及死循环
		if (left < right)  //交换
		
			int tmp = *left;
			*left = *right;
			*right = tmp;
		
	


int main()

	int arr[10] =  1,3,2,4,8,7,9,5,6,0 ;
	int sz = sizeof(arr) / sizeof(arr[0]);

	print(arr, sz); //打印移动前
	move(arr, sz);  //移动
	print(arr, sz); //打印移动后

	return 0;

最后:感谢您的观看!

           感谢您的支持!

如果没有关注的话就来个关注吧!你的支持是作者写作的最大动力!

谢谢!!!

作者这两天终于忙完了哈!可以继续更新啦!!!久等啦!!!

以上是关于空瓶换水喝水问题?给一个数组,如何让奇数在前偶数在后?C语言从入门到入土(进阶篇)(算法篇p5)的主要内容,如果未能解决你的问题,请参考以下文章

算法 调整数组顺序,使得奇数在前偶数在后,分别保证奇数和偶数之间的相对位置不变

用数组编写:将一整数数列按奇数在前、偶数在后的顺序重新排放,并要求奇偶数两部分分别有序

调整该数组中数字的顺序,奇数在前,偶数在后

[算法]: 递归-空瓶换饮料

算法题:奇数在前 偶数在后,相对顺序保持不变

请问在java数组中怎么判断奇数偶数的个数?