解答:
#include <stdio.h>
int main(void)
{
int k = 4;
int m = 1;
for (int i=1; i<=5; i=i+1) {
for (int j=1; j<=k; j=j+1) {
printf (" ");
}
for (int j=1; j<=m; j=j+1) {
printf ("*");
}
printf ("\n");
k = k - 1;
//m = 2*i + 1;
m = m+2;
}
return 0;
}
解答:
f(a,10),則n=10
index=0, i=1,a[1]>a[0],index=1
i=2,a[2]>a[1],index=2
i=3,a[3]<a[2],不做任何事
i=4,a[4]<a[2],不做任何事
i=5,a[5]<a[2],不做任何事
i=6,a[6]<a[2],不做任何事
i=7,a[7]==a[2],index=7
i=8,a[8]<a[7],不做任何事
i=9,a[9]<a[7],不做任何事
結束for迴圈,此時回傳index=7
解答:
f1為循序搜尋,f2為二分搜尋法
若要找到value=100的值,則k=33 (因為a[k]=3k+1)
f1要找到數列中第33位置的值,從第0個位置開始搜尋,共需執行34次
f2使用二分搜尋法則搜尋5次
過程如下
解答:
b[1]=1,b[2]=2,.....b[100]=100
a[1]=b[1]+a[0]=1+0=1
a[2]=b[2]+a[1]=2+1=3
a[3]=b[3]+a[2]=3+3=6
a[4]=b[4]+a[3]=4+6=10
可知a[n]即為 1+2+...+n的總和
a[50]=(1+50)*50/2=1275
a[30]=(1+30)*30/2=465
a[50]_a[30]=127-465=810
解答:
本題為遞迴觀念
f(1000)
for迴圈計算1~1000總和
sum=sum+f(2*1000/3)
|------->f(666)
計算1~666總和
sum=sum+f(2*666/3)
|----->f(444)
計算1~444總和
sum=sum+f(2*444/3)
本題求sum=sum+i 執行次數
f(1000) 執行累加1000次
f(666)執行666次
f(444)執行444次
依此類推
執行總次數為1000+666+444+296+197+131+87+58+38+25+.... 最接近3000次