【有料c++题目周刊 | 第二期】小艺学编程

第一题:小艺学算法

题目描述

小艺是一名高中生,她喜欢研究算法。最近,她发现了一种奇特的排序方法:

将数组 A A A 中的所有元素按照奇偶性分为两个子数组 A O A_O AO A E A_E AE
A O A_O AO A E A_E AE 分别使用冒泡排序进行排序。
A O A_O AO A E A_E AE 合并起来,按照奇偶性从小到大的顺序排列。
例如,如果数组 A A A 为 [5, 3, 2, 4, 1],则 A O A_O AO 为 [5, 3, 1], A E A_E AE 为 [2, 4]。使用冒泡排序后, A O A_O AO 变为 [1, 3, 5], A E A_E AE 变为 [2, 4]。最终,合并后的数组 A A A 为 [1, 2, 3, 4, 5]。

小艺希望你能帮她编写一个程序,实现这种排序方法。

输入格式

输入第一行包含一个整数 n n n,表示数组 A A A 的长度。

第二行包含 n n n 个整数,表示数组 A A A 的元素。

输出格式

输出一行 n n n 个整数,表示排序后的数组 A A A

数据范围

1≤n≤100,

−109≤人工智能≤109

输入样例

5
5 3 2 4 1

输出样例

1 2 3 4 5

解题思路&C++题解

这道题的解题思路如下:

首先,读入数组 A A A 的长度 n n n 和元素。
然后,使用两个指针 i i i j j j 分别扫描数组 A A A,将其中的奇数和偶数分别存到两个新的数组 A O A_O AO A E A_E AE 中。
A O A_O AO A E A_E AE 分别使用冒泡排序进行排序。
最后,使用两个指针 i i i j j j 分别扫描 A O A_O AO A E A_E AE,将其中的元素合并起来,按照奇偶性从小到大的顺序即可输出。

C++题解如下:

#include <iostream>
#include <algorithm>

using namespace std;

const int N = 110;

int n;
int a[N];

void bubble_sort(int *arr, int n)
{
    for (int i = 0; i < n - 1; i ++ )
        for (int j = 0; j < n - 1 - i; j ++ )
            if (arr[j] > arr[j + 1])
                swap(arr[j], arr[j + 1]);
}

int main()
{
    cin >> n;
    for (int i = 0; i < n; i ++ ) cin >> a[i];

    int a_o[N], a_e[N];
    int cnt_o = 0, cnt_e = 0;
    for (int i = 0; i < n; i ++ )
    {
        if (a[i] & 1) a_o[cnt_o ++ ] = a[i];
        else a_e[cnt_e ++ ] = a[i];
    }

    bubble_sort(a_o, cnt_o);
    bubble_sort(a_e, cnt_e);

    int i = 0, j = 0;
    while (i < cnt_o && j < cnt_e)
    {
        if (a_o[i] < a_e[j]) cout << a_o[i ++ ] << ' ';
        else cout << a_e[j ++ ] << ' ';
    }

    while (i < cnt_o) cout << a_o[i ++ ] << ' ';
    while (j < cnt_e) cout << a_e[j ++ ] << ' ';

    return 0;
}


第二题:「超级难算法」

题目描述

小艺是一名资深的程序员,她最近在研究一种新的算法,这种算法称为「超级难算法」。超级难算法非常复杂,小艺希望通过编写一个程序来帮助自己理解这种算法。

超级难算法的输入是一个整数 n,输出是一个长度为 n 的数组 a,满足 a[i] = i^2 (i 从 0 开始)。

但是,超级难算法不止是要求出数组 a,还要求在输出数组 a 的同时,在屏幕上输出一个提示信息,提示信息的格式如下:

“超级难算法已经完成!n = [n],a = [a[0], a[1], …, a[n-1]]”

其中,[n] 和 [a[0], a[1], …, a[n-1]] 都要用实际的数字替换。

例如,当 n=5 时,超级难算法的输出应该是:

超级难算法已经完成!n = 5,a = [0, 1, 4, 9, 16]

小艺非常期待你能帮助她完成这道题。

请使用 c++ 编写一个程序,完成超级难算法的功能。

输入格式

输入只有一行,是一个整数 n,表示超级难算法的输入。

n 的范围是 1 到 10^9,保证 n 是一个正整数。

输入样例

5

输出格式

输出只有一行,是超级难算法的提示信息。

输出样例

超级难算法已经完成!n = 5,a = [0, 1, 4, 9, 16]

其他要求

程序中的变量和函数名都必须使用英文,不允许使用汉语或其他语言。

程序中不能使用任何第三方库,也不能使用 c++ 标准库中的任何函数。所有程序功能都必须由你自己实现。

你需要完成以下步骤:

  1. 在程序开头,使用 #include 指令引入头文件 iostream。

  2. 在主函数 main 中,定义一个整数变量 n,使用 cin 输入 n 的值。

  3. 在主函数 main 中,定义一个整型指针变量 a,使用 new 关键字动态分配内存,为 a 分配长度为 n 的数组。

  4. 在主函数 main 中,使用 for 循环遍历数组 a,并且使用超级难算法的公式计算出 a[i] 的值。

  5. 在主函数 main 中,使用 cout 输出超级难算法的提示信息。

  6. 在主函数 main 的最后,使用 delete 关键字释放 a 所占用的内存。

  7. 在程序结尾,使用 return 0;结束程序。

解题思路&C++题解

#include <iostream>

using namespace std;

int main() {
    int n;
    cin >> n;

    int *a = new int[n];
    for (int i = 0; i < n; i++) {
        a[i] = i * i;
    }

    cout << "超级难算法已经完成!n = " << n << ",a = [";
    for (int i = 0; i < n; i++) {
        cout << a[i];
        if (i < n - 1) {
            cout << ", ";
        }
    }
    cout << "]" << endl;

    delete[] a;

    return 0;
}

该代码实现了超级难算法的功能,输入了一个整数 n,然后使用动态内存分配为数组 a 分配了长度为 n 的空间,并使用 for 循环遍历数组 a,并使用超级难算法的公式计算出 a[i] 的值。最后,输出了超级难算法的提示信息,并释放了 a 所占用的内存。

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小刘较瘦

打赏即动力,打赏即鼓励。

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值