标签:printf 数字 main 穷举法 时间 ++ else i++ for
题目:
输入一组整数,求出这组数字子序列和中最大值。也就是只要求出最大子序列的和,不必求出最大的那个序列。例如:
序列:-2 11 -4 13 -5 -2,则最大子序列和为20。
序列:-6 2 4 -7 5 3 2 -1 6 -9 10 -2,则最大子序列和为16。
1.
1 /* 2 算法一:穷举法(3个for) 3 时间复杂度:O(n^3) 4 5 */ 6 #include <stdio.h> 7 #include <malloc.h> 8 9 int Max = 0; 10 int find_max(int len, int arr[]){ 11 int i, j, k, sum; 12 for(i=0; i<len; i++){ 13 for(j=i; j<len; j++){ 14 sum = 0; 15 for(k=i; k<=j; k++){ 16 sum += arr[k]; 17 } 18 if(sum > Max){ 19 Max = sum; 20 } 21 } 22 } 23 return Max; 24 25 } 26 27 int main(){ 28 int i, len, *arr; 29 printf("请输入数组的长度: "); 30 scanf("%d",&len); 31 arr = (int *)malloc(sizeof(int)*len); 32 printf("请输入数组的值:"); 33 for(i=0; i<len; i++){ 34 scanf("%d",&arr[i]); 35 } 36 find_max(len,arr); 37 printf("最大连续子序列和 :%d\n", Max ); 38 39 return 0; 40 }
2.
1 /* 2 算法二:算法一的优化 (2个for) 3 时间复杂度:O(n^2) 4 */ 5 #include <stdio.h> 6 #include <malloc.h> 7 8 int Max = 0; 9 int find_max(int arr[],int n, int len){ 10 int i, sum = 0; 11 for(i=n; i<len; i++){ 12 sum += arr[i]; 13 if(sum > Max){ 14 Max = sum ; 15 } 16 } 17 return Max; 18 } 19 20 int main(){ 21 int i, len, *arr; 22 printf("请输入数组的长度:"); 23 scanf("%d",&len); 24 arr = (int *)malloc(sizeof(int)*len); 25 printf("请输入数组的值:"); 26 for (i=0; i<len; i++) 27 { 28 scanf("%d", &arr[i]); 29 } 30 31 32 for(i=0; i<10; i++){ 33 find_max(arr,i, len); 34 } 35 36 printf("最大连续子序列和:%d \n",Max); 37 38 return 0; 39 }
3.
1 /* 2 算法三:联机算法 3 时间复杂度:O(n) 4 */ 5 #include <stdio.h> 6 #include <malloc.h> 7 8 int Max = 0; 9 int find_max(int len, int arr[]) 10 { 11 int i, sum = 0; 12 for(i=0; i<len; i++) 13 { 14 sum += arr[i]; 15 if(sum > Max) 16 { 17 Max = sum; 18 }else if(sum < 0){ 19 sum = 0; 20 } 21 } 22 23 return Max; 24 } 25 26 int main(){ 27 int i, len, *arr; 28 printf("请输入数组的长度:"); 29 scanf("%d",&len); 30 arr = (int *)malloc(sizeof(int)*len); 31 printf("请输入数组的值:"); 32 for (i=0; i<len; i++) 33 { 34 scanf("%d", &arr[i]); 35 } 36 find_max(len, arr); 37 printf("最大连续子序列和:%d \n",Max); 38 return 0; 39 }
参考:http://blog.163.com/kevinlee_2010/blog/static/169820820201010495438247/
标签:printf 数字 main 穷举法 时间 ++ else i++ for
原文地址:http://www.cnblogs.com/LinSL/p/7412489.html