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

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

题一:喝水问题,一块钱可以换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;
}

最后:感谢您的观看!

          感谢您的支持!

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

谢谢!!!

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

相关文章
|
3天前
|
存储 C语言
C语言中字符串的引用与数组元素操作
C语言中字符串的引用与数组元素操作
12 0
|
14天前
|
算法
算法系列--两个数组的dp问题(2)(下)
算法系列--两个数组的dp问题(2)(下)
19 0
|
14天前
|
存储 算法
算法系列--动态规划--⼦数组、⼦串系列(数组中连续的⼀段)(1)(下)
算法系列--动态规划--⼦数组、⼦串系列(数组中连续的⼀段)(1)
17 0
|
14天前
|
算法
算法系列--动态规划--⼦数组、⼦串系列(数组中连续的⼀段)(1)(上)
算法系列--动态规划--⼦数组、⼦串系列(数组中连续的⼀段)(1)
21 0
|
14天前
|
算法 计算机视觉
算法系列--两个数组的dp问题(1)(下)
算法系列--两个数组的dp问题(1)
18 0
|
14天前
|
算法
算法系列--两个数组的dp问题(1)(上)
算法系列--两个数组的dp问题(1)
14 0
|
22天前
|
算法 C语言
【算法与数据结构】 C语言实现单链表队列详解2
【算法与数据结构】 C语言实现单链表队列详解
|
22天前
|
存储 算法 C语言
【算法与数据结构】 C语言实现单链表队列详解1
【算法与数据结构】 C语言实现单链表队列详解
|
23天前
|
编译器 程序员 C语言
【C语言】变长数组,二分查找和数组之间自动替换的实现
【C语言】变长数组,二分查找和数组之间自动替换的实现
|
23天前
|
存储 C语言
【C语言数组】创建、初始化、以及使用2
【C语言数组】创建、初始化、以及使用