记录一些 小程序
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;
}