Euler61

三角形数、正方形数、五边形数、六边形数、七边形数和八边形数统称为多边形数。它们分别由如下的公式给出:

三角形数P3,n=n(n+1)/21, 3, 6, 10, 15, …
正方形数P4,n=n21, 4, 9, 16, 25, …
五边形数P5,n=n(3n−1)/21, 5, 12, 22, 35, …
六边形数P6,n=n(2n−1)1, 6, 15, 28, 45, …
七边形数P7,n=n(5n−3)/21, 7, 18, 34, 55, …
八边形数P8,n=n(3n−2)1, 8, 21, 40, 65, …

由三个4位数8128、2882、8281构成的有序集有如下三个有趣的性质。

  1. 这个集合是循环的,每个数的后两位是后一个数的前两位(最后一个数的后两位也是第一个数的前两位)。
  2. 每种多边形数——三角形数(P3,127=8128)、正方形数(P4,91=8281)和五边形数(P5,44=2882)——在其中各有一个代表。
  3. 这是唯一一个满足上述性质的4位数有序集。

存在唯一一个包含六个4位数的有序循环集,每种多边形数——三角形数、正方形数、五边形数、六边形数、七边形数和八边形数——在其中各有一个代表。求这个集合的元素和

思路:

​ 模块1:找出全部1000~9999的x边形数n,并把n存到g【x】【n / 100】动态数组中

​ 模块2:对数组{3, 4, 5, 6, 7, 8}进行全排列,并进行dfs

​ 详细见代码

代码:

#include <stdio.h>
#include <vector>
#include <algorithm>
using namespace std;

int Triangle (int n) {
    return n * (n + 1) / 2;
}

int Square(int n ) {
    return n * n;
}

int Pentagonal (int n ) {
    return n * (3 * n - 1) / 2;
}

int Hexagonal (int n ){
    return n * (2 * n - 1);
}

int Heptagonal (int n) {
    return n * (5 * n - 3) / 2;
}

int Octagonal (int n) {
    return n * (3 * n - 2);
}

int (*FuncList[6])(int) = {
        Triangle , Square, Pentagonal, Hexagonal,Heptagonal, Octagonal
};

vector<int>g[10][105];
vector<int>gg[10];

void model1 () {
    for (int i = 1; ; i++) {
        int flag = 0;
        for (int j = 0; j < 6; j++) {
            int t = FuncList[j](i);
            if (1000 <= t && t < 10000) {
                g[j][t / 100].push_back(t);
                gg[j].push_back(t);
            }
            else if(t >= 10000) {
                flag ++;
            }
        }
        if (flag == 6) {
            break;
        }
    }
}

bool dfs(int *num, int t, int now, int k, int sum) {
    if (k == 6) {
        if (now % 100 == t / 100) {
            printf("%d\n", sum);
            return true;
        }
        return false;
    }
    int m = now % 100;
    for (int i = 0; i < g[num[k]][m].size(); i++) {
        int tt = g[num[k]][m][i];
        bool flag = dfs(num, t, tt, k + 1, sum + tt);
        if(flag) return true;
    }
    return false;
}

void model2() {
    int num[6] = {0, 1, 2, 3, 4, 5};
    bool flag = 0;
    do {
        for (int i = 0; i < gg[num[0]].size(); i++) {
            int t = gg[num[0]][i];
            flag = dfs(num, t, t, 1, t);
            if (flag) {
                break;
            }
        }
    }while(next_permutation(num, num + 6) && !flag);
}

int main () {
    model1();
    model2();
    return 0;
}

转载请注明出处!!!

如果有写的不对或者不全面的地方 可通过主页的联系方式进行指正,谢谢

1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值