记录一些 小程序

1 给定一个整型数组,有正数,负数和0. 求出连续的子序列中的和的最大值。(qiuhe.c)
例如:int a[10] = {-1,5,7,0,-22,7,9,-2,0,5};的最大值为子序列“7,9,-2,0,5”求和,值为19

#include <stdio.h>
int a[] = {-1,-5,-7,0,-22,-7,-9,-2,0,5};
int main()
{
    int sum = 0;
    int max = 0;
    int number = sizeof(a)/sizeof(int);
    int i = 0;
    while(i < number)
    {
        sum += a[i];
        i++;
        if(sum < 0)
        {
            sum = 0;
        }
        else
        {
            if(sum > max)
              max = sum;
        }
    }

    printf("max = %d\n",max);

}

2 输入一个已经按升序排序过的整型数组(数组元素都为非负数,无重复元素)和一个数字。在数组中查找两个数,使得它们的和正好是输入的那个数字。
如果有多对数字的和等于输入的数字,输出任意一对即可。
例如输入数组1、2、4、7、11、15和数字15。由于4+11=15,因此输出4和11。(yuansuzhihe.c)

#include <stdio.h>
#include <stdlib.h>

int search(int num)
{
    static char *p, *q;
    int i,j,n;
    char buf[] = {1,2,3,4,5,6,7,8,9};
    p = buf;
    q = buf;
    n = sizeof(buf)/sizeof(char);
    for(i = 0; i < n; i++){
        q = q+i+1;
        for(j = 0; j < n-i-1; j++){
            if(num == *p + *q){
                printf("the result is:%d %d\n", *p,*q);
                break;
            }
            else
                q++;

        }
        p++;
        q = buf;
    }
    if(i >= n)
    printf("can not find\n");
}
int main(void)
{
    int num = 0;
    printf("input a num");
    scanf("%d", &num);

    search(num);
    return 0;

}

posted @ 2013-07-23 13:38  时来Y运转  阅读(154)  评论(0编辑  收藏  举报