2019年8月2日 星期五

1080802資訊第二專長程式設計

實作題
三角形判別

找最大和


輸出數字時通常都是
cout>>數字>>” “;
所以最後一個數字後會有空白
但實作題通常要求「最後一個數字後無空白」
建議
輸出迴圈跑完後,加上:
cout>>”\b”;


C標準語言程式庫
http://tw.gitbook.net/c_standard_library/c_function_isalpha.html

-----------------------------------------------

氣泡排序(Bubble sorting)

資料結構中最簡單之排序法。所謂氣泡排序法就是相臨資料互相比較,若發現資料順序不對,就將資料互換。依次由上往下比,則結果將如氣泡般,依次由下往上浮起。
【分析】
1.      比較之回合數=資料數(n)-1
2.        每一回合至少有一資料可以排列至正確之次序。
3.        時間複製度,最差與平均時間O(n2)
4.        需要一個額外(元素)空間。
5.        為一穩定排序。
6.        資料量小時,使用效果佳。
【原理】
1.        每一回合逐一比較相臨資料,依排序之順序交換位置。
2.        每回合至少會有一次交換位置,至沒交換位置則停止
【演算法】
BubSort(int A[], int n)  //氣泡排序法之副程式
  {
    int i, j , k,t=1, Temp,sp;
    for (i=n-1; i>0; i--)
       {
        sp=1;
       for (j =0; j <=i; j++)
          if (A[j] > A[j+1])
             {  //兩數交換位置
               Temp = A[j];
               A[j] = A[j+1];
               A[j+1] = Temp;
               sp=0;
             }
             if (sp==1) break;          
       }
  }


-----------------------------------------------









1051029apcsconcept

void F( ) {
    char t, item[] = {'2', '8', '3', '1', '
    int a, b, c, count = 5;
    for (a=0; a<count-1; a=a+1) {        a<4
        c = a;                                            c=0
        t = item[a];                                  t=item[0]=2
        for (b=a+1; b<count; b=b+1) {
            if (item[b] < t) {
                c = b;
                t = item[b];
            }
            if ((a==2) && (b==3)) {
               printf ("%c %d\n", t, c);
            }
        }
    }
}


偷懶解法:
由後面反推,從a=2來解
a=2
c=a=2
t=item[2]=3
b=3
item[3]1<3
t=1 ,c=3




3
int K(int a[], int n) {
if (n >= 0)
    return (K(a, n-1) + a[n]);
else
    return 0;
}

int G(int n){
    int a[] = {5,4,3,2,1};
    return K(a, n);

}




4
int a=2, b=3;
int c=4, d=5;
int val;

val = b/a + c/b + d/b;     1+1+1(無條件捨去)

printf ("%d\n", val);


5
int a[9] = {1, 3, 5, 7, 9, 8, 6, 4, 2};
int n=9, tmp;

for (int i=0; i<n; i=i+1) {
    tmp = a[i];                               tmp=a[0]
    a[i] = a[n-i-1];                         a[0]=a[8]
    a[n-i-1] = tmp;                        a[8]=tmp=a[0]
}
for (int i=0; i<=n/2; i=i+1)
    printf ("%d %d ", a[i], a[n-i-1]);


a[9]={1,3,5,7,9,8,6,4,2}
i=0{2,3,5,7,9,8,6,4,1}
i=1{2,4,5,7,9,8,6,3,1}
i=2{2,4,6,7,9,8,5,3,1}
i=3{2,4,6,9,7,8,5,3,1}



以此類推
a[0],a[8],a[1],a[7]


6
int F(int a) {
    if ( <condition> )
        return 1;
    else
        return F(a-2) + F(a-3);
}

F(7)=F(5)+F(4)
       =F(3)+F(2)+F(2)+F(1)     
       =F(1)+F(0)+F(0)+F(-1)+F(-1)+F(-2)  
以此類推回傳12  ,a<0




8. 下面哪組資料若依序存入陣列中,將無法直接使用二分搜尋法搜尋資料?

k有序


9
if (s>=90) {
    printf ("A \n");
}
else if (s>=80) {
    printf ("B \n");
}
else if (s>60) {
    printf ("D \n");
}
else if (s>70) {
    printf ("C \n");
}
else {
    printf ("F\n");
}


60,70-79共11個




10
imt K (int p[], int v) {
    if (p[v]!=v) {
p[v] = K(p, p[v]);
    }
    return p[v];
}

void G (int p[], int l, int r) {
    int a=K(p, l), b=K(p, r);
    if (a!=b) {
p[b] = a;
    }
}

int main (void) {
    int p[5]={0, 1, 2, 3, 4};
    G(p, 0, 1);
    G(p, 2, 4);
    G(p, 0, 4);
    return 0;

}



11
int maze[5][5]= {{1, 1, 1, 1, 1},
                    {1, 0, 1, 0, 1},
{1, 1, 0, 0, 1},
{1, 0, 0, 1, 1},
{1, 1, 1, 1, 1} };
int count=0;
for (int i=1; i<=3; i=i+1) {
    for (int j=1; j<=3; j=j+1) {
        int dir[4][2] = {{-1,0}, {0,1}, {1,0}, {0,-1}};
        for (int d=0; d<4; d=d+1) {
            if (maze[i+dir[d][0]][j+dir[d][1]]==1) {
                count = count + 1;
            }
        }
    }
}

迷宮








15
int i, sum, arr[10];

for (int i=0; i<10; i=i+1)
    arr[i] = i;

sum = 0;
for (int i=1; i<9; i=i+1)
    sum = sum - arr[i-1] + arr[i] + arr[i+1];

printf ("%d", sum);


sum=sum -arr[0] + arr[1] + arr[2]

-0 1 2
-1 2 3
-2 3 4
-3 4 5
以此類推
-7 8 9


2+~9+8=52







17
代入法


18
void G (int a){
 printf ("%d ", a);
 if (a>=3)
 return;
 else
 G(a+1);
 printf ("%d ", a);

}

G(1)
printf 1
G(2)
printf 2
G(3)
printf 3
return
G(2)
printf 2
G(1)
printf 1



21
代入法
=2,=1

(A)6*G(2,0)
(B)7*G(1,0)
(C)8*G(2,0)
(D)9*G(2,0)


22D2SA








23
int i=2, x=3;
int N=65536;

while (i <= N) {
i = i * i * i;
x = x + 1;
}

printf ("%d %d \n", i, x);

i=2
i=2的3次方
x=4

i=2的3次方
i=2的9次方
x=5

i=2的9次方
i=2的27次方
x=6




24
int G (int a, int x) {
  if (x == 0)
        return 1;
    else
        return (a * G(a, x - 1));

}



G(3,7)
=3*G(3,6)
以此類推
=3*3*3*3*3*3*3G(3,0)


25
慢慢跑

search(, , )

search(, , )

search(, , )

search(, , )


沒有留言:

張貼留言