zoukankan      html  css  js  c++  java
  • Project Euler:Problem 86 Cuboid route

    A spider, S, sits in one corner of a cuboid room, measuring 6 by 5 by 3, and a fly, F, sits in the opposite corner. By travelling on the surfaces of the room the shortest "straight line" distance from S to F is 10 and the path is shown on the diagram.


    However, there are up to three "shortest" path candidates for any given cuboid and the shortest route doesn't always have integer length.

    It can be shown that there are exactly 2060 distinct cuboids, ignoring rotations, with integer dimensions, up to a maximum size of M by M by M, for which the shortest route has integer length when M = 100. This is the least value of M for which the number of solutions first exceeds two thousand; the number of solutions when M = 99 is 1975.

    Find the least value of M such that the number of solutions first exceeds one million.



    高中做过的题目。把立方体各面展开,这个路径实际上是一个直角三角形的斜边。

    要使得的这个路径最小。如果矩阵个边长分别为a<=b <=c

    最短路径为sqrt((a+b)^2+c^2)


    把a,b视为总体,记做ab

    则ab范围是[2,2M]

    在寻找到开方后结果为整数的ab和c后

    假设ab<c:a,b是能够平均分ab的

    假设ab>=c:b的取值到大于ab/2而且满足b<=c,ab-b<=c 得到b的取值个数为(c-(ab+1)/2)+1


    #include <iostream> 
    #include <string>
    #include <cmath>
    using namespace std;
    
    
    int main()
    {
    	int c = 1;
    	int count = 0;
    	while (count < 1000000)
    	{
    		c++;
    		for (int ab = 2; ab <= 2 * c; ab++)
    		{
    			int path=ab*ab + c*c;
    			int tmp = int(sqrt(path));
    			if (tmp*tmp == path)
    			{
    				count += (ab >= c) ?

    1+(c-(ab+1)/2) : ab / 2; } } } cout << c << endl; system("pause"); return 0; }




  • 相关阅读:
    Thinkphp整合最新Ueditor编辑器
    git管理和自动部署项目
    [转]桶
    Linux下ThinkPHP网站目录权限设置
    ThoughtWorks FizzBuzzWhizz 代码实现
    windows bat脚本实现ftp自动下载 删除
    MCM/ICM2018美国大学生数学建模大赛D题翻译
    解决C/C++语言中全局变量重复定义的问题
    使用fabric解决百度BMR的spark集群各节点的部署问题
    解决百度BMR的spark集群开启slaves结点的问题
  • 原文地址:https://www.cnblogs.com/mengfanrong/p/5356549.html
Copyright © 2011-2022 走看看