【ProjectEuler】ProjectEuler_039

來源:互聯網
上載者:User
// Problem 39// 14 March 2003//// If p is the perimeter of a right angle triangle with integral length sides, {a,b,c}, there are exactly three solutions for p = 120.//// {20,48,52}, {24,45,51}, {30,40,50}//// For which value of p <= 1000, is the number of solutions maximised?#include <iostream>#include <windows.h>#include <ctime>using namespace std;//************************************// Method:    IsRightAngleTriangle// FullName:  IsRightAngleTriangle// Describe:  判斷三角形是否為直角三角形// Access:    public// Returns:   bool// Qualifier:// Parameter: int leg1直角邊1// Parameter: int leg2直角邊2// Parameter: int leg3斜邊//************************************inline bool IsRightAngleTriangle(int leg1, int leg2, int leg3){    return leg1 * leg1 + leg2 * leg2 == leg3 * leg3;}void F1(){    cout << "void F1()" << endl;    LARGE_INTEGER timeStart, timeEnd, freq;    QueryPerformanceFrequency(&freq);    QueryPerformanceCounter(&timeStart);    const int MAX_PERIMETER = 1000;//最大的邊長和    int maxCount = 0;//所有周長中,能組成的最多的直角三角形個數    int maxCountPerimeter = 0;//能組成的最多的直角三角形個數的周長    int count = 0;//當前的周長能組成的直角三角形個數    //邊長和,取值範圍[3,MAX_PERIMETER]    for(int perimeter = 3; perimeter <= MAX_PERIMETER; ++perimeter)    {        //初始化        count = 0;        //第三邊,取值範圍[1,perimeter/2)        for(int leg3 = perimeter / 2; leg3 > 0; --leg3)        {            //直角邊1,取值範圍[1,leg3)            for(int leg1 = 1; leg1 < leg3; ++leg1)            {                //直角邊2                int leg2 = perimeter - leg1 - leg3;                //如果是直角三角形                if(IsRightAngleTriangle(leg1, leg2, leg3))                {                    count++;                }            }        }        //記錄最大值        if(count > maxCount)        {            maxCount = count;            maxCountPerimeter = perimeter;        }    }    cout << "能組成最多直角三角形個數的周長為" << maxCountPerimeter << ",一共" << maxCount << "個" << endl;    QueryPerformanceCounter(&timeEnd);    cout << "Total Milliseconds is " << (double)(timeEnd.QuadPart - timeStart.QuadPart) * 1000 / freq.QuadPart << endl;    time_t currentTime = time(NULL);    char timeStr[30];    ctime_s(timeStr, 30, ¤tTime);    cout << endl << "By GodMoon" << endl << timeStr;}//主函數int main(){    F1();    return 0;}/*void F1()能組成最多直角三角形個數的周長為840,一共16個Total Milliseconds is 2082.55By GodMoonWed Apr 11 11:20:42 2012*/

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.