程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> zoj3629 Treasure Hunt IV

zoj3629 Treasure Hunt IV

編輯:C++入門知識

zoj3629 Treasure Hunt IV


 

思路:找規律,發現符合要求的數為

[0,1)

[4,9)

[16,25)

[36,49)

…………

[n^2 , (n+1)^2)

發現 n^2 到(n+1)^2(n為偶數)前開後閉的區間為符合要求的數,然後發現(n+1)*(n+1)-n*n組成的數列為一個差值為4等差數列,我們需要求區間[a,b]符合要求的數,那麼只需要用b前面符合要求的數減去a-1中符合要求的數。。。。。

 

開始的時候一直WA,到後才發現輸入輸出時用的%I64d要換成%lld,悲劇呀。。。。。。

 

code:

#include
#include
#include
#include
using namespace std;

typedef long long LL;

LL f(LL x)   //計算0到x之間符合要求的數,等差數列首項看為1
{
    if(x==-1) return 0;
    LL a=sqrt(x);
    LL sum=0;
    if(a*a==x)
    {
        LL n=(a+1)/2;
        sum=n+n*(n-1)*2;
        if(a%2==0)
        {
            sum++;
        }
    }
    else if(a*a

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved