Project Euler:Problem 61 Cyclical figurate numbers
来源:互联网 发布:专卖店软件泰安 编辑:程序博客网 时间:2024/05/16 09:07
Triangle, square, pentagonal, hexagonal, heptagonal, and octagonal numbers are all figurate (polygonal) numbers and are generated by the following formulae:
Triangle P3,n=n(n+1)/2 1, 3, 6, 10, 15, ...Square P4,n=n2 1, 4, 9, 16, 25, ...Pentagonal P5,n=n(3n−1)/2 1, 5, 12, 22, 35, ...Hexagonal P6,n=n(2n−1) 1, 6, 15, 28, 45, ...Heptagonal P7,n=n(5n−3)/2 1, 7, 18, 34, 55, ...Octagonal P8,n=n(3n−2) 1, 8, 21, 40, 65, ...The ordered set of three 4-digit numbers: 8128, 2882, 8281, has three interesting properties.
- The set is cyclic, in that the last two digits of each number is the first two digits of the next number (including the last number with the first).
- Each polygonal type: triangle (P3,127=8128), square (P4,91=8281), and pentagonal (P5,44=2882), is represented by a different number in the set.
- This is the only set of 4-digit numbers with this property.
Find the sum of the only ordered set of six cyclic 4-digit numbers for which each polygonal type: triangle, square, pentagonal, hexagonal, heptagonal, and octagonal, is represented by a different number in the set.
又暴力破解了一次ㄟ( ▔, ▔ )ㄏ
一开始没看清题意,我以为这些数依次是满足triangle, square, pentagonal, hexagonal, heptagonal, and octagonal,结果发现无解┑( ̄Д  ̄)┍
#include <iostream>#include <string>#include <vector>#include <unordered_map>#include <time.h>using namespace std;int triangle[100];int pentagonal[10000];int hextagonal[10000];int heptagonal[10000];int octagonal[10000];int tri_count = 0;void getTriangle(){int count = 0;for (int i = 1; i <= 200; i++){int num = i*(i + 1) / 2;if (num >1000&&num<10000)triangle[count++] = num;}tri_count = count;}bool isSqure(int n){int i = sqrt(n);if (i*i == n&&n>1000&&n<10000)return true;return false;}void getPentagonal(){for (int i = 1; i <= 200; i++){int num = i*(3 * i - 1) / 2;if (num > 1000 && num < 10000)pentagonal[num] = 1;}}bool isPentagonal(int n){if (pentagonal[n] == 1)return true;return false;}void getHexagonal(){for (int i = 1; i <= 200; i++){int num = i*(2 * i - 1);if (num>1000 && num < 10000)hextagonal[num] = 1;}}bool isHexagonal(int n){if (hextagonal[n] == 1)return true;return false;}void getHeptagonal(){for (int i = 1; i <= 200; i++){int num = i*(5 * i - 3) / 2;if (num > 1000 && num < 10000)heptagonal[num] = 1;}}bool isHeptagonal(int n){if (heptagonal[n] == 1)return true;return false;}void getOctagonal(){for (int i = 1; i <= 200; i++){int num = i*(3 * i - 2);if (num > 1000 && num < 10000)octagonal[num] = 1;}}bool isOctagonal(int n){if (octagonal[n] == 1)return true;return false;}bool(*figurate[5])(int) = { isSqure, isPentagonal, isHexagonal, isHeptagonal, isOctagonal };vector<int> GetRandomSequence() {unordered_map<int, int>tab;vector<int>res;int num;for (int i = 0; i < 5; i++){do{num = rand() % 5;} while (tab.find(num) != tab.end());tab.insert(make_pair(num, 1));res.push_back(num);}return res;}int check(){int sum = 0;srand((int)time(0));vector<int>rs = GetRandomSequence();for (int i = 0; i < tri_count; i++){int a = triangle[i] / 100;int b = triangle[i] % 100;for (int s = 10; s <= 99; s++){if ((*figurate[rs[0]])(b * 100 + s)){for (int p = 10; p <= 99; p++){if ((*figurate[rs[1]])(s * 100 + p)){for (int hx = 10; hx <= 99; hx++){if ((*figurate[rs[2]])(p * 100 + hx)){for (int hp = 10; hp <= 99; hp++){if ((*figurate[rs[3]])(hx * 100 + hp)){if ((*figurate[rs[4]])(hp * 100 + a)){sum = triangle[i] + b * 100 + s + s * 100 + p + p * 100 + hx + hx * 100 + hp + hp * 100 + a;return sum;}}}}}}}}}}return -1;}int main(){memset(pentagonal, 0, sizeof(pentagonal));memset(hextagonal, 0, sizeof(hextagonal));memset(heptagonal, 0, sizeof(heptagonal));memset(octagonal, 0, sizeof(octagonal));getTriangle();getPentagonal();getHexagonal();getHeptagonal();getOctagonal();int flag;while (true){flag = check();if (flag != -1)break;}cout << flag << endl;system("pause");return 0;}
把那个随机生成全排列换成next_permutation也是能搞出来的。
0 0
- Project Euler:Problem 61 Cyclical figurate numbers
- EularProject 61:Cyclical figurate numbers
- Project Euler problem 61
- 【Project Euler】【Problem 2】Even Fibonacci numbers
- Project Euler:Problem 21 Amicable numbers
- Project Euler:Problem 42 Coded triangle numbers
- Project Euler:Problem 44 Pentagon numbers
- Project Euler:Problem 55 Lychrel numbers
- Project Euler:Problem 88 Product-sum numbers
- Project Euler Problem 2: Even Fibonacci numbers
- Project Euler Problem 21 Amicable numbers
- Project Euler Problem 543 Prime-Sum Numbers
- Matlab 编程 Project Euler Problem 21 Amicable numbers
- Euler Project Problem 6
- project euler problem 11
- Project Euler Problem 81
- Project Euler Problem 60
- Project Euler Problem 59
- Java中WebService实例
- GRE写作必备句型
- Oracle与MySQL的转化差异
- cocos2dx 单点触摸的简单使用
- 开源日志系统比较
- Project Euler:Problem 61 Cyclical figurate numbers
- Adb 的使用
- 驱动之module_init/module_exit
- Android -- 使用Fragment
- C++类内存分布
- List和ArrayList的区别
- JVM --并发垃圾回收器CMS
- linux中svn命令集
- app应用分析