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

本文阅读 2 分钟
首页 代码,C/C#/C++ 正文

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

最后:感谢您的观看!

           感谢您的支持!

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

谢谢!!!

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

本文为互联网自动采集或经作者授权后发布,本文观点不代表立场,若侵权下架请联系我们删帖处理!文章出自:https://blog.csdn.net/weixin_62700590/article/details/121644491
-- 展开阅读全文 --
KillDefender 的 Beacon 对象文件 PoC 实现
« 上一篇 02-09
Web安全—逻辑越权漏洞(BAC)
下一篇 » 03-13

发表评论

成为第一个评论的人

热门文章

标签TAG

最近回复