搜尋此網誌

2024年7月1日 星期一

有2、3、4、5、6個數字,能組成多少種互不相等且並無重複這幾個數字的四位數數字,共有多少個?

 #include <stdio.h>


int main()
{
    int i, total;

    total = 0;
    for (i = 0; i < 10000; i++)
    {
        if (
            (((i / 1000) >= 2) && ((i / 1000) <= 6)) &&
            (((i % 1000 / 100) >= 2) && ((i % 1000 / 100) <= 6)) &&
            (((i % 100 / 10) >= 2) && ((i % 100 / 10) <= 6)) &&
            (((i % 10) >= 2) && ((i % 10) <= 6)) &&
            (
                ((i / 1000) != (i % 1000 / 100)) &&
                ((i / 1000) != (i % 100 / 10)) &&
                ((i / 1000) != (i % 10)) &&
                ((i % 1000 / 100) != (i % 100 / 10)) &&
                ((i % 1000 / 100) != (i % 10)) &&
                ((i % 100 / 10) != (i % 10)) &&
                (1)
            )
        )
        {
            // printf("i=%d\n", i);
            total++;
        }
    }
    printf("total=%d\n", total);

    return 0;
}

[output] : total = 120

將字串反向列印, 並做位置對調

 #include <stdio.h>


char *swap_str(char *str)
{
    int i, tmp, max;

    i = 0;
    while (str[i] != '\0')
        i++;
    max = i;

    for (i = 0; i < (max >> 1); i++)
    {
        tmp = str[i];
        str[i] = str[max - i - 1];
        str[max - i - 1] = tmp;
    }
    return str;
}

int main()
{
    char str1[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
    char str2[] = "9876543210";

    printf(">>%s\n", str1);
    printf("=>%s\n", swap_str(str1));
    printf(">>%s\n", str2);
    printf("=>%s\n", swap_str(str2));
    return 0;
}

[output]:
>>ABCDEFGHIJKLMNOPQRSTUVWXYZ
=>ZYXWVUTSRQPONMLKJIHGFEDCBA
>>9876543210
=>0123456789

簡單的將字串反向列印, 不做位置對調

 #include <stdio.h>


int main()
{
    char *str = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
    // char *str = "9876543210";
    int i, max;

    i = 0;
    while (str[i] != '\0')
        i++;
    max = i;

    printf(">>%s\n", str);

    printf("=>");
    for (i = max - 1; i > 0; i--)
    {
        if (str[i] != '\0')
            printf("%c", str[i]);
    }
    if ((i == 0) && (str[i] != '\0'))
        printf("%c", str[i]);

    return 0;
}

[output]:
>>ABCDEFGHIJKLMNOPQRSTUVWXYZ
=>ZYXWVUTSRQPONMLKJIHGFEDCBA

[output]:
>>9876543210
=>0123456789


Function pointer and type define

#include <stdio.h>

void test_fun1(int input, int tmp)
{
    printf("%s(%d)...%d\n", __FUNCTION__, input, tmp);
}

void test_fun2(int input, int tmp)
{
    printf("%s(%d)***%d\n", __FUNCTION__, input, tmp);
}

typedef void (*function_ptr)(int, int);

int main()
{
    function_ptr op_fun;
    void (*fun_ptr)(int, int);

    fun_ptr = test_fun1;
    fun_ptr(2, 3);

    fun_ptr = test_fun2;
    fun_ptr(7, 6);

    printf("-------\n");
    op_fun = test_fun1;
    op_fun(77, 11);
    printf("-------\n");

    return 0;
}

[Output]:
test_fun1(2)...3
test_fun2(7)***6
-------
test_fun1(77)...11
-------

用數字劃出菱形由小(邊)至大(中心)

 #include <stdio.h>


void draw_triangle_fun(unsigned int length, unsigned int width)
{
    unsigned int t_w, t_l;
    char space = ' ', ch;

    for (t_w = 0; t_w <= width; t_w++)
    {
        for (t_l = 0; t_l < length - t_w; t_l++)
        {
            printf("%c", space);
        }
        for (t_l = 0; t_l <= t_w; t_l++)
        {
            ch = t_l + '0';
            printf("%c", ch);
        }
        // for (t_l = 0; t_l <= t_w; t_l++)
        for (t_l = length - t_w; t_l <= length; t_l++)
        {
            if (t_l > (length - t_w))
            {
                ch = length - t_l + '0';
                printf("%c", ch);
            }
        }
        printf("\n");
    }
    for (t_w = 0; t_w < width; t_w++)
    {
        for (t_l = 0; t_l <= t_w; t_l++)
        {
            printf("%c", space);
        }
        for (t_l = 0; t_l < (length - t_w); t_l++)
        {
            ch = t_l + '0';
            printf("%c", ch);
        }
        // for (t_l = 0; t_l < (length - t_w); t_l++)
        for (t_l = (length - t_w); t_l > 0; t_l--)
        {
            // ch = (length - t_l) + '0';
            if (((length - t_w) > t_l) && (t_l > 0))
            {
                ch = t_l - 1 + '0';
                printf("%c", ch);
            }
        }
        printf("\n");
    }
}

int main()
{
    unsigned int length, width;

    printf("\nPlease enter length/width(1 ~ 9):");
    scanf("%d", &width);
    if (width > 9)
        width = 9;
    length = width;

    printf("\n=============================================\n");
    draw_triangle_fun(length, width);
    printf("\n=============================================\n");

    return 0;
}

Please enter length/width(1 ~ 9):9 ============================================= 0 010 01210 0123210 012343210 01234543210 0123456543210 012345676543210 01234567876543210 0123456789876543210 01234567876543210 012345676543210 0123456543210 01234543210 012343210 0123210 01210 010 0 =============================================

2024年6月30日 星期日

用數字劃出三角形

 #include <stdio.h>


void draw_triangle_fun(unsigned int length, unsigned int width)
{
    unsigned int t_w, t_l;
    char space = ' ', ch;

    for (t_w = 0; t_w <= width; t_w++)
    {
        for (t_l = 0; t_l <= (length - t_w); t_l++)
        {
            ch = t_l + '0';
            printf("%c", ch);
        }
        printf("\n");
    }

    for (t_w = 0; t_w <= width; t_w++)
    {
        for (t_l = 0; t_l <= t_w; t_l++)
        {
            ch = t_l + '0';
            printf("%c", ch);
        }
        printf("\n");
    }

    for (t_w = 0; t_w <= width; t_w++)
    {
        for (t_l = 0; t_l <= length - t_w; t_l++)
        {
            printf("%c", space);
        }
        for (t_l = 0; t_l <= t_w; t_l++)
        {
            ch = t_l + '0';
            printf("%c", ch);
        }
        printf("\n");
    }

    for (t_w = 0; t_w <= width; t_w++)
    {
        for (t_l = 0; t_l <= t_w; t_l++)
        {
            printf("%c", space);
        }
        for (t_l = 0; t_l <= length - t_w; t_l++)
        {
            ch = t_l + '0';
            printf("%c", ch);
        }
        printf("\n");
    }
}

int main()
{
    unsigned int length, width;

    printf("\nPlease enter length/width(1 ~ 9):");
    scanf("%d", &width);
    if (width > 9)
        width = 9;
    length = width;

    printf("\n=============================================\n");
    draw_triangle_fun(length, width);
    printf("\n=============================================\n");

    return 0;
}

Please enter length/width(1 ~ 9):9 ============================================= 0123456789 012345678 01234567 0123456 012345 01234 0123 012 01 0 0 01 012 0123 01234 012345 0123456 01234567 012345678 0123456789 0 01 012 0123 01234 012345 0123456 01234567 012345678 0123456789 0123456789 012345678 01234567 0123456 012345 01234 0123 012 01 0 =============================================


數字排序 由大到小與由小到大 排列

#include <stdio.h>

#define MAX_NUM 10

int main()
{
    int i, j, tmp;
    int *members;
    int test_case0[MAX_NUM] = {13, -5, 0, 7, 79, 213, 5, 132, -53, 71};
    int test_case1[MAX_NUM] = {91, 65, -12, 78, -9, -312, 5, 132, -121, -9};
    printf("\n==================Original===================\n");
    members = test_case0;
    for (i = 0; i < MAX_NUM; i++)
    {
        printf("%d ", members[i]);
    }

    printf("\n========Arrange from large to small=========\n");
    //-------------------------------------
    members = test_case0;
    for (i = 0; i < MAX_NUM; i++)
    {
        for (j = i + 1; j < MAX_NUM; j++)
        {
            if (members[i] < members[j])
            {
                tmp = members[i];
                members[i] = members[j];
                members[j] = tmp;
            }
        }
    }
    //-------------------------------------

    for (i = 0; i < MAX_NUM; i++)
    {
        printf("%d", members[i]);
        if ((i + 1) < MAX_NUM)
            printf(" > ");
    }
    printf("\n==================Original===================\n");
    members = test_case1;
    for (i = 0; i < MAX_NUM; i++)
    {
        printf("%d ", members[i]);
    }
    printf("\n========Arrange from small to large=========\n");
    //-------------------------------------
    members = test_case1;
    for (i = 0; i < MAX_NUM; i++)
    {
        for (j = i + 1; j < MAX_NUM; j++)
        {
            if (members[i] > members[j])
            {
                tmp = members[i];
                members[i] = members[j];
                members[j] = tmp;
            }
        }
    }
    //-------------------------------------

    for (i = 0; i < MAX_NUM; i++)
    {
        printf("%d", members[i]);
        if ((i + 1) < MAX_NUM)
            printf(" < ");
    }
    printf("\n=============================================\n");

    return 0;
}

==================Original=================== 13 -5 0 7 79 213 5 132 -53 71 ========Arrange from large to small========= 213 > 132 > 79 > 71 > 13 > 7 > 5 > 0 > -5 > -53 ==================Original=================== 91 65 -12 78 -9 -312 5 132 -121 -9 ========Arrange from small to large========= -312 < -121 < -12 < -9 < -9 < 5 < 65 < 78 < 91 < 132 =============================================

開根號小數點後精度兩位數

#include <stdio.h>
unsigned int square_root_fun(unsigned int value, unsigned int *after_dec_point_ptr)
{
    unsigned int max_num, i, root;

    if (value <= 1)
    {
        if (after_dec_point_ptr != NULL)
            *after_dec_point_ptr = 0;
        return value;
    }

    value *= 10000; // Magnification 10000 times

    for (max_num = 31; max_num > 0; max_num--)
    {
        if (value & (1 << max_num))
            break;
    }

    root = 0;
    for (i = (max_num >> 1); i > 0; i--)
    {
        if (value >= ((root | (1 << i)) * (root | (1 << i))))
            root |= (1 << i);
    }
    if (i == 0)
    {
        if (value >= ((root | (1 << i)) * (root | (1 << i))))
            root |= (1 << i);
    }
    if (after_dec_point_ptr != NULL)
    {
        *after_dec_point_ptr = root % 100; // Restore magnification and Storage position after decimal point
    }
    root /= 100; // Restore magnification

    return root;
}
int main()
{
    unsigned int var_a, root, after_dec_point_ptr;
    printf("\nPlease input a value:");
    scanf("%d", &var_a);
    printf("\n=============================================\n");
    root = square_root_fun(var_a, &after_dec_point_ptr);
    printf("%d square root is %d.%d", var_a, root, after_dec_point_ptr);
    printf("\n=============================================\n");
    return 0;
}



Please input a value:123456
=============================================
123456 square root is 351.36
=============================================


Please input a value:2345
=============================================
2345 square root is 48.42
=============================================


Please input a value:1
=============================================
1 square root is 1.0
=============================================


Please input a value:0
=============================================
0 square root is 0.0
=============================================




2024年6月29日 星期六

用減法與位移做除法並取餘數

 #include <stdio.h>


unsigned int division_fun(unsigned int dividend, unsigned int divisor, unsigned int *remainder_ptr)
{
    unsigned int max_num, i, quotient;
    if ((dividend == 0) || (divisor == 0) || (dividend < divisor) || (remainder_ptr == NULL))
    {
        if ((dividend < divisor) && (remainder_ptr))
        {
            *remainder_ptr = dividend;
        }
        return 0;
    }

    for (max_num = 31; max_num > 0; max_num--)
    {
        if (dividend & (1 << max_num))
            break;
    }

    *remainder_ptr = dividend;
    quotient = 0;
    for (i = max_num; i > 0; i--)
    {
        if (*remainder_ptr >= (divisor << i))
        {
            *remainder_ptr -= (divisor << i);
            quotient |= (1 << i);
        }
    }

    if ((i == 0) && (*remainder_ptr >= (divisor << i)))
    {
        *remainder_ptr -= (divisor << i);
        quotient |= (1 << i);
    }

    return quotient;
}

int main()
{
    unsigned int var_a, var_b, quotient, remainder;

    printf("\nPlease input a and b values:");
    scanf("%d %d", &var_a, &var_b);

    printf("\n=============================================\n");
    quotient = division_fun(var_a, var_b, &remainder);
    printf("%d / %d = %d...%d", var_a, var_b, quotient, remainder);
    printf("\n=============================================\n");

    return 0;
}

Please input a and b values:123 3 ============================================= 123 / 3 = 41...0 =============================================

Please input a and b values:12345
132

=============================================
12345 / 132 = 93...69
=============================================