系统大小端判断,数组求和,找数组中和为定值的两个数,找1-M中,连续累积和为N的所有子串。。。

#include<stdio.h>

static inline int sex()
{
        const int probe = 1;
        return !*(const char *)&probe;
}

int main(int argc, char *argv[])
{
        if(sex())
                printf("Big-endian\n");
        else
                printf("Little-endian\n");

        return 0;
}


找和为定值

#include<stdio.h>

void find_sum(int data[], unsigned int length, int sum)
{
    int begin = 0;
    int end = length - 1;
    long temp_sum = 0;
    
    /* sort(data, length); */
    while(begin < end)
    {
        temp_sum = data[begin] + data[end];
        if(temp_sum == sum)
        {
            /* 找到了 */
            printf("Find it: [%d] + [%d] = %d\n", data[begin], data[end], sum);
            
            #if 0
            /* 需要找出所有满足条件的数字,继续 */
                begin++;
                end--;
            #else
            /* 只需要输出一对,找到了直接退出 */      
                break;
            #endif
        }
        else
        {
            if(temp_sum < sum)
            {
                /* 如果当前和偏小,设法增大和,稳住尾指针不动,首指针往后移 */
                begin++;
            }
            else
            {
                /* 如果当前和偏大,设法减小和,原理同上 */
                end--;
            }
        }
    }
}


数组求和

/* 数组求和 [递归] */
int sum(int*a, int n)
{
     return n == 0 ? 0 : sum(a, n -1) + a[n -1];
}


找1-M中连续和为N的整数串

#include<stdio.h>

void print(int begin, int end)
{
    int i = 0;
    for(i = begin; i <= end; i++)
    {
        printf("%d ", i);
    }
    printf("\n");
}

void find_num(int size, int sum)
{
    int begin = 1, end = 2, temp_sum = 0; 
    if(size < 1 || sum < 1)
    {
        return ;
    }

    temp_sum = begin + end;
    while(begin < size)
    {
        if(temp_sum == sum)
        {
            print(begin, end);
        }

        while(temp_sum > sum)
        {
            temp_sum -= begin;
            begin++;

            if(temp_sum == sum)
            {
                print(begin, end);
            }
        }

        end++;
        temp_sum += end;
    }
}

int main(int argc, char *argv[])
{
    find_num(100000, 0xFFFD);
    return 0;
}


版权:代码都是抄的!


你可能感兴趣的:(系统大小端判断,数组求和,找数组中和为定值的两个数,找1-M中,连续累积和为N的所有子串。。。)