首页 > 其他分享 >三个数可分等差数列

三个数可分等差数列

时间:2024-06-20 22:53:37浏览次数:25  
标签:sequence4 三个 sequence1 sequence2 sequence3 数可分 size 等差数列 numbers

#include <iostream>
#include <vector>

using namespace std;

void printGroups(vector<int>& sequence1, vector<int>& sequence2, vector<int>& sequence3, vector<int>& sequence4) {
    cout << "Group 1: ";
    for (int i = 0; i < sequence1.size(); i++) {
        cout << sequence1[i] << " ";
    }
    cout << endl;

    cout << "Group 2: ";
    for (int i = 0; i < sequence2.size(); i++) {
        cout << sequence2[i] << " ";
    }
    cout << endl;

    cout << "Group 3: ";
    for (int i = 0; i < sequence3.size(); i++) {
        cout << sequence3[i] << " ";
    }
    cout << endl;

    cout << "Group 4: ";
    for (int i = 0; i < sequence4.size(); i++) {
        cout << sequence4[i] << " ";
    }
    cout << endl;
}

void countWays(vector<int>& numbers, vector<int>& removed, vector<int>& sequence1, vector<int>& sequence2, vector<int>& sequence3, vector<int>& sequence4, int index, int& count) {
    if (sequence1.size() == 4 && sequence2.size() == 4 && sequence3.size() == 4 && sequence4.size() == 4) {
        count++;
        printGroups(sequence1, sequence2, sequence3, sequence4);
        cout << "Removed numbers: ";
        for (int i = 0; i < removed.size(); i++) {
            cout << removed[i] << " ";
        }
        cout << endl;
        cout << endl;
        return;
    }

    if (index >= numbers.size()) {
        return;
    }

    // 尝试将当前数添加到第一个等差数列中
    if (sequence1.size() < 4) {
        if (sequence1.size() < 2 || numbers[index] - sequence1[sequence1.size() - 1] == sequence1[1] - sequence1[0]) {
            sequence1.push_back(numbers[index]);
            countWays(numbers, removed, sequence1, sequence2, sequence3, sequence4, index + 1, count);
            sequence1.pop_back();
        }
    }

    // 尝试将当前数添加到第二个等差数列中
    if (sequence2.size() < 4) {
        if (sequence2.size() < 2 || numbers[index] - sequence2[sequence2.size() - 1] == sequence2[1] - sequence2[0]) {
            sequence2.push_back(numbers[index]);
            countWays(numbers, removed, sequence1, sequence2, sequence3, sequence4, index + 1, count);
            sequence2.pop_back();
        }
    }

    // 尝试将当前数添加到第三个等差数列中
    if (sequence3.size() < 4) {
        if (sequence3.size() < 2 || numbers[index] - sequence3[sequence3.size() - 1] == sequence3[1] - sequence3[0]) {
            sequence3.push_back(numbers[index]);
            countWays(numbers, removed, sequence1, sequence2, sequence3, sequence4, index + 1, count);
            sequence3.pop_back();
        }
    }

    // 尝试将当前数添加到第四个等差数列中
    if (sequence4.size() < 4) {
        if (sequence4.size() < 2 || numbers[index] - sequence4[sequence4.size() - 1] == sequence4[1] - sequence4[0]) {
            sequence4.push_back(numbers[index]);
            countWays(numbers, removed, sequence1, sequence2, sequence3, sequence4, index + 1, count);
            sequence4.pop_back();
        }
    }

    // 将当前数添加到已移除的数中
    removed.push_back(numbers[index]);

    // 不将当前数添加到任何一个等差数列中
    countWays(numbers, removed, sequence1, sequence2, sequence3, sequence4, index + 1, count);

    // 将当前数从已移除的数中移除
    removed.pop_back();
}

int main() {
    vector<int> numbers = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19};
    vector<int> removed, sequence1, sequence2, sequence3, sequence4;
    int count = 0;

    countWays(numbers, removed, sequence1, sequence2, sequence3, sequence4, 0, count);

    cout << "Number of ways: " << count << endl;

    return 0;
}

 

标签:sequence4,三个,sequence1,sequence2,sequence3,数可分,size,等差数列,numbers
From: https://www.cnblogs.com/Eufisky/p/18259637

相关文章

  • 在全为1的数组中随机三个位置为0
    std:random_device是一个在C++标准库中用于生成非确定性随机数的类,头文件<random>。它通常用于为随机数生成器(如std:mt19937)提供种子,以确保每次程序运行时都能产生不同的随机数序列。 std:iota是C++标准库中的一个函数,定义在<numeric>头文件中。它用于给容器中的元......
  • 在Linux中,Tomcat8005、8009、8080三个端口的含义?
    在Linux系统中,Tomcat的8005、8009和8080这三个端口分别承担着不同的职责和功能。以下是这三个端口的详细解释:8005端口:用途:用于处理TomcatWeb服务器的SHUTDOWN命令。当需要关闭Tomcat服务器时,可以通过向该端口发送SHUTDOWN命令来实现。访问限制:默认情况下,此端口只能在本地访......
  • python函数声明(参数/返回值注释)和三个双引号用法
     1#python的"""三个双引号两种用法:(1)多行注释(2)定义多行字符串2deff1(ham:42,eggs:int='spam')->"Nothingtoseehere":3print("函数注释",f1.__annotations__)#函数注释{'ham':42,'eggs':<cl......
  • 解读supOS工业操作系统的三个层级
    工业操作系统作为工业企业全面数字化转型和政府数字经济改革的核心引擎与底座,为工厂内人机料协同、工厂间供应链协同、行业指数发展研究、产业链能力提升研究等方面提供基础性平台与工具赋能。工业操作系统的具体形态,按服务对象、服务内容可以分为工厂操作系统、行业云操作系统......
  • 团队博客会议(一)解决三个问题
    在会议中,参与者围绕几个核心议题展开了深入而细致的讨论,以下是会议详细内容的概述: 1.项目进度汇报当前状态:各团队负责人首先汇报了各自负责模块的最新进展,包括已完成的任务、正在进行的工作以及遇到的障碍。亮点与挑战:指出了项目中已取得的阶段性成果,比如用户界面的初步......
  • 文件IO,创建编号为ABC三个线程,三个线程循环打印自己的编号,要求打印出来的结果必须是ABC
    第二个,拷贝图片#include<myhead.h>typedefstruct{ constchar*srcfile; constchar*destfile; intlen;}info;void*task1(void*arg){ infobuf=*((info*)(arg)); //打开这两个文件,只读的形式 intfd=-1; if((fd=open(buf.srcfile,O_RDONLY))==-1) {......
  • 这个地方的程序员太闲了,写了三个世界流行的操作系统!
    Andreas开发宁静OS则是为了逃离毒瘾,VilleM.Turjanmaa用汇编写MenuetOS,是因为汇编性能高。他发现Linux中那些C/C++写的组件用汇编重写时,性能可以提升10%~40%,于是就开始重写了。世界上有个地方,这里的程序员似乎特别闲,特别喜欢开发操作系统。这个地方就是北欧。1991年,芬兰的......
  • 我在TikTok上卖车给老外,三个月入账2000万
    文雪豹财经社王亚骏抱着"反正亏不了多少钱"的心态,安岚(化名)在TikTok上试着把中国汽车卖给老外。短短一个季度,她就拿下了2000万元的营收,而投入仅2000元左右。在此之前,她从未有过任何销售工作经验。去年8月初,安岚带着一身的疲惫从某互联网大厂裸辞,“想躺一段......
  • 三个pdf工具和浏览软件(pdftk,muppdf,epdfview)
    安装pdftkpdftk是一款功能强大的PDF处理工具,主要用于对PDF文件进行各种操作。它提供了丰富的功能,包括但不限于合并、拆分、旋转、加密、解密、添加水印、从PDF文档中解出附件等。pdftk分为图形界面版本和命令行版本,适用于不同的用户需求。安装pkginstallpdftk软件需要下......
  • 第三个计划表出炉
    2024年6月9号编写从2024年6月9号到2029年12月31号计划:1、2025年底必须结婚2、2026年考虑孩子的事3、2027年考虑是否要继续待北京4、2028年,如果27年工作不变,继续维持。如果有变动,尽量保持稳定5、2029年要考虑更多关于孩子的事理财计划:1、2024年年底全部撤出,至少目前主要账号成正......