2014年3月28日 星期五

C語言 - 累加總合 使用迴圈與遞迴

- 使用迴圈
結束條件: i > n

sum = 1
= 1 + 2
= 1 + 2 + 3
= 1 + 2 + 3 + ...
= 1 + 2 + 3 + ... + (n - 3)
= 1 + 2 + 3 + ... + (n - 3) + (n - 2)
= 1 + 2 + 3 + ... + (n - 3) + (n - 2) + (n - 1)
= 1 + 2 + 3 + ... + (n - 3) + (n - 2) + (n - 1) + n
#include <stdio.h>

int main(int argc, char *argv[])
{
 int i, n, sum = 0;

 printf("Enter a number: ");
 scanf("%d", &n);

 for (i = 1; i <= n; i++)
  sum +=i;

 printf("sum = %d\n", sum);
 return 0;
}
- 使用遞迴
結束條件: n == 1

calc(n) = calc(n - 1) + n
= calc(n - 2) + (n - 1) + n
= calc(n - 3) + (n - 2) + (n - 1) + n
= ...
= calc(3) + ... + (n - 3) + (n - 2) + (n - 1) + n
= calc(2) + 3 + ... + (n - 3) + (n - 2) + (n - 1) + n
= calc(1) + 2 + 3 + ... + (n - 3) + (n - 2) + (n - 1) + n
= 1 + 2 + 3 + ... + (n - 3) + (n - 2) + (n - 1) + n
#include <stdio.h>

int calc(int n)
{
 if (n == 1)
  return 1;

 return calc(n - 1) + n; 
}

int main(int argc, char *argv[])
{
 int n, sum;

 printf("Enter a number: ");
 scanf("%d", &n);
 sum = calc(n);

 printf("sum = %d\n", sum);
 return 0;
}

2014年3月20日 星期四

C語言 - 字串組合 使用遞迴

# Loop1
0 0 (abc)
        # Loop2    
        1 1 (abc)
                # Loop3
                2 2 (abc)
        1 2 (acb)
                2 2 (acb)
0 1 (bac)
        1 1 (bac)
                2 2 (bac)
        1 2 (bca)
                2 2 (bca)
0 2 (cba)
        1 1 (cba)
                2 2 (cba)
        1 2 (cab)
                2 2 (cab)
#include <stdio.h>
#include <math.h>

int perm(char *list, int i, int n);

int main(int argc, char *argv[])
{
    int i, n;
    char list[] = {'a', 'b', 'c'};

    i = 0;
    n = (sizeof(list) / sizeof(list[0])) - 1;

    perm(list, i, n);

    printf("\n");
    return 0;
}
#define SWAP(x, y, t) ((t) = (x), (x) = (y), (y) = (t))
int perm(char *list, int i, int n)
{
    int j, temp;
    if (i == n) {
        for (j = 0; j <= n; j++)
            printf("%c", list[j]);
            printf(" ");
    } else {
        for (j = i; j <= n; j++) {
            SWAP(list[i], list[j], temp);
            perm(list, i + 1, n);
            SWAP(list[i], list[j], temp);
        }
    }
}

C語言 - Binary Search 使用遞迴

1. 一組已排序n個整數
2. left = 0, right = n - 1
3. middle = (left + right) / 2
4.
searchnum > list[middle], left = middle + 1
searchnum = list[middle], return middle
searchnum < list[middle], right = middle - 1
5.
- 建立終止遞回呼叫的條件
- 建立遞回呼叫,使得每一次的呼叫更進一步接近解答
#include <stdio.h>
#include <stdlib.h>
#include <math.h>

int binsearch(int list[], int searchnum, int left, int right);

int main(int argc, char *argv[])
{
    int searchnum, left, right, pos;
    int list[] = {11, 22, 33, 44, 55, 66, 77, 88, 99};

    printf("Enter the numbfer you want to search: ");
    scanf("%d", &searchnum);

    left = 0;
    right = (sizeof(list)/sizeof(list[0])) - 1;

    pos = binsearch(list, searchnum, left, right);
    if (pos == -1)
        printf("not found\n");
    else
        printf("found pos: %d\n", pos);

    return 0;
}
#define COMPARE(x, y) (((x) < (y)) ? -1 : ((x) == (y)) ? 0 : 1)
int binsearch(int list[], int searchnum, int left, int right)
{
    int middle;
    if (left <= right) {
        middle = (left + right) / 2;
        switch(COMPARE(list[middle], searchnum)) {
        case -1:
            return binsearch(list, searchnum, middle + 1, right);
        case 0:
            return middle;
        case 1:
            return binsearch(list, searchnum, left, middle - 1);
        }
    }
    return -1;
}

C語言 - Binary Search 使用迴圈

1. 一組已排序n個整數
2. left = 0, right = n - 1
3. middle = (left + right) / 2
4.
searchnum > list[middle], left = middle + 1
searchnum = list[middle], return middle
searchnum < list[middle], right = middle - 1
#include <stdio.h>
#include <stdlib.h>
#include <math.h>

int binsearch(int list[], int searchnum, int left, int right);

int main(int argc, char *argv[])
{
    int searchnum, left, right, pos;
    int list[] = {11, 22, 33, 44, 55, 66, 77, 88, 99};

    printf("Enter the numbfer you want to search: ");
    scanf("%d", &searchnum);

    left = 0;
    right = (sizeof(list)/sizeof(list[0])) - 1;
    pos = binsearch(list, searchnum, left, right);
    if (pos == -1)
        printf("not found\n");
    else
        printf("found pos: %d\n", pos);

    return 0;
}
#define COMPARE(x, y) (((x) < (y)) ? -1 : ((x) == (y)) ? 0 : 1)
int binsearch(int list[], int searchnum, int left, int right)
{
    int middle;
    while (left <= right) {
        middle = (left + right) / 2;
        switch (COMPARE(list[middle], searchnum)) {
        case -1:
                left = middle + 1;
                break;
        case 0:
                return middle;
        case 1:
                right = middle - 1;
                break;
        }
    }
    return -1;
}

C語言 - 整數排序 Selection Sort

1. SWAP巨集
2. Selection Sort演算法
3. main函數的輸入與輸出
#include <stdio.h>
#include <stdlib.h>
#include <math.h>

#define MAX_SIZE 100
void sort(int list[], int n);
int binsearch(int list[], int n, int left, int right);

int main(int argc, char *argv[])
{
 int i, n;
 int searchnum, left, right, pos;
 int list[MAX_SIZE];

 printf("Enter the number of numbers to generate: ");
 scanf("%d", &n);

 if ((n < 1) || (n > MAX_SIZE)) {
  fprintf(stderr, "Improper value of n\n");
  exit(1);
 }

 printf("hello\n");
 for (i = 0; i < n; i++) {
  list[i] = rand() % 1000;
  printf("%d ", list[i]);
 } 
 printf("\n");

 sort(list, n);

 for (i = 0; i < n; i++)
  printf("%d ", list[i]);
 printf("\n");

 printf("Enter the numbfer you want to search: ");
 scanf("%d", &searchnum);

 left = 0;
 right = n - 1;
 pos = binsearch(list, searchnum, left, right);
 if (pos == -1)
  printf("not found\n");
 else
  printf("found pos: %d\n", pos);

 return 0;
}
#define SWAP(x, y, t) ((t) = (x), (x) = (y), (y) = (t))
void sort(int list[], int n)
{
 int i, j, min, temp;
 for (i = 0; i < n-1; i++) {
  min = i;
  for (j = i+1; j < n; j++)
   if (list[min] > list[j])
    min = j;
  SWAP(list[i], list[min], temp);
 }
}

2014年3月6日 星期四

Blogger 圖片超出邊框的問題

1. 範本-> 自訂->

2. 進階-> 新增CSS
在"新增自定 CSS"方框中加入下面 CSS 設定
.post img {max-width: 98% !important}
3. 參考來源
http://sealmemory.blogspot.tw/2013/03/google-blogger.html