-
這不是乙個好問題。
這樣,可以提出 3 和 6 與 1、2、4、5 等形成 1 到 6 的序列,它們的總和值為 n(n+1) 2
其餘部分是 3 3-3,即 1 3*3 3-1*3 = 1 3*27-1*3
6 3-6 是 2 3 * 3 3 3 * 3 = 2 3 * 27-2 * 3
後半部分是1+2+3+...int(n 3) 然後乘以 3,即 int(n 3)*(int(n 3)+1) 2 *3
第一段是 1 3 + 2 3 + 3 3 +...int(n 3) 3 並乘以 27
在這裡我搜尋了一下,發現 1 3 + 2 3 + 3 3 +...n^3=(1+2+3+..n)^2=(n(n+1)/2)^2
代入 int(n 3) 並乘以 27。
由於 C 語言的性質,n 3 僅四捨五入。
所以最終的公式是 n(n+1) 2-n 3*(n 3+1) 2*3+n 3*n 3*(n 3+1)*(n 3+1) 4*27
不知道是不是有誤**。 Excel 驗證的刀路。 /
#include
int main()
int64 s;
int64 n;
s=(n+1)*n/2-(n/3)*(3+(n/3)*3)/2+((n/3)*(n/3)+1)/2*((n/3)+1)*(n/3)/2)*27;
printf("%i64d",s);
return 0;
-
#include
int64 a[100001]=;
int main()
int n;
int64 i;
for (i = 1; i < 100001; i++)if (i % 3 == 0)
a[i] = a[i - 1] +i*i*i;
else a[i] = a[i - 1] +i;
while (scanf("%d",&n) &n >= 0)printf("%i64d",a[n]);
開啟這麼大的陣列裡面主會爆炸記憶體,那應該是主問題,如果不對,就比我的ac**吧。
-
請注意,這不是判斷性的。 when n is a negative indicate the end of file.
a) 這個標題是找到表示式 1+2+3 3+4+5+6 3+......,給定的 n 可能不是 3 的倍數。 (2)如果這個問題採用公式簡化的方法:設n是3的倍數:
1+2+3^3+4+5+6^3+……n^3 =(1+2+3+..n)-(3+6+9+..n)+27*(1^3+2^3+3^3+..
n 3] 3) =n*(n+1) 2-n*(n+3) 6+27*[n 3(n 3+1) 2] 2 如果簡化到最後:n*n*(n 2+6*n+2) 12;(3)**設計過程:直接使用簡單公式n*n*(n 2+6*n+2) 12是錯誤的。
很容易理解,從左到右乘以 n 得到 n 的最大冪 4,得到 n 的最大冪 6 位,這必須超過 int64d 的表示範圍。 例如,當 n=90000 時,結果為 -681050182461517205,表示存在溢位。 includeint main() else if(n%3==2) 使 n 是 3 的倍數 sum=n*n*(n*n+6*n+13) 12; printf("%i64d",sum+temp); return 1;解決方法:
在倒數第二步中使用公式 n*(n+1) 2-n*(n+3) 6+27*[n 3(n 3+1) 2] 2 求和。 sum=n/3*(n/3+1)/2; sum*=sum; sum=sum*27+n*(n+1)/2-n*(n+3)/6;就是這樣!! 4)另一種解決方案,最基本的遞迴。
在這個問題中,遞迴花費的時間比直接使用公式略少,可能是公式中的乘法時間超過了遞迴加法執行時間。 5)總結:當你遇到乙個解式,公式中有n個4個以此類推,而且n比較大的時候,不要直接找,直接用分布就行了。
-
可以通過傳遞陣列的元素數來解決,即使用兩個引數,乙個是陣列的名稱,另乙個是陣列的長度。
執行時錯誤是指程式在執行過程中崩潰。
例如:除以零。
陣列越界:int a[3]; a[10000000]=10
指標越界:int*p; p=(int *)malloc(5 * sizeof(int));p+1000000)=10
使用已經釋放的空間:int*p; p=(int *)malloc(5 * sizeof(int));free(p); p=10
陣列開啟的容量太大,超出了堆疊的範圍,導致堆疊溢位:int a[100000000]。
陣列訪問超出範圍:
使用陣列的下標獲取陣列中指定索引的元素。 這稱為對陣列的訪問。
如果乙個陣列被定義為具有 n 個元素,那麼訪問這 n 個元素(下標為 0 到 n-one 的元素)是合法的,如果訪問這 n 個元素以外的元素是非法的,則稱為“越界”。 陣列占用連續的記憶體空間。 然後,我們可以通過指定陣列下標來訪問此記憶體中的不同位置。
因此,當下標太大時,存取記憶體不再是陣列“部分”中的記憶體。 您將訪問其他變數的記憶體。
解決方法:由於陣列的元素數預設沒有作為引數的內容傳遞到呼叫函式中,所以會帶來陣列訪問越界的問題,可以通過傳遞陣列的元素數來解決,即用兩個引數, 乙個是陣列的名稱,另乙個是陣列的長度。
示例:include void putarray(int *p, int length) { 這裡確定條目引數 p 和 length ....... } 的有效性for(int i=0;i
尊敬的使用者,您好! 很高興回答你的問題,根據你的描述,你可以去圖書館找一些文章看,參考一下,說不定會對你有所幫助,給你推薦一台手拉手的盯著看機:三星i869四核,安卓,寸屏,4G記憶體。 >>>More
1.建議使用防病毒軟體卡巴斯基。
2.防火牆建議安裝天網防火牆防病毒軟體安裝不能超過1個,以衝突為準。 >>>More