免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: whpu000625
打印 上一主题 下一主题

求一个数组中最大的相邻元素之和 [复制链接]

论坛徽章:
0
1 [报告]
发表于 2004-12-29 12:50 |显示全部楼层

求一个数组中最大的相邻元素之和


  1. #include <stdio.h>;
  2. #include <stdlib.h>;

  3. void MaxSum(int *m, int n)
  4. {
  5.     int i, start=0, end=0, max, sum, istart=0, iend=0, sum2=0, start2=0;
  6.         max=m[0];
  7.         for(i=0;i<n && m[i]<=0;i++)//我觉得把负数单独拿出来考虑更好一点
  8.         {
  9.                 if(m[i]>;max)
  10.                 {
  11.                         max=m[i];
  12.                         start=i;
  13.                 }
  14.         }
  15.         if(i==n)
  16.         {
  17.                 printf("start %d, end %d, sum %d\n", start, start, max);
  18.                 return;
  19.         }
  20.         start2=start=istart=i;
  21.         for(i=n-1;i >;-1 && m[i]<=0;i--);//末尾的非正数也拿掉,少做几次加法
  22.         iend=i;
  23.         max=m[start];
  24.         sum=0;
  25.         for(i=istart;i<=iend;i++)
  26.         {
  27.                 sum+=m[i];
  28.                 sum2+=m[i];
  29.                 if(sum>;max)
  30.                 {
  31.                         end=i;
  32.                         max=sum;
  33.                 }
  34.                 if(sum2<=0 && m[i]>;0)//这里用的算法和yuxh的一样.真佩服yuxh,算法这方面做得太好了
  35.                 {
  36.                         sum2=m[i];
  37.                         start2=i;
  38.                 }
  39.                 if(sum2>;max)
  40.                 {
  41.                         start=start2;
  42.                         end=i;
  43.                         max=sum2;
  44.                 }
  45.         }
  46.     printf("start %d, end %d, sum %d\n", start, end, max);
  47. }
  48. int main()
  49. {
  50.     int m[10] = {-2,-3,-6,-3,-4,-3,-2,-1,-2,-3};

  51.     MaxSum(m, 10);
  52.         return 0;
  53. }
复制代码

论坛徽章:
0
2 [报告]
发表于 2004-12-29 13:15 |显示全部楼层

求一个数组中最大的相邻元素之和

原帖由 "yuxh" 发表:
,3,-6,3,4,3,-2,5,2,-3};

start 0, end 8, sum 14

sorry,还没完全领会精神就乱发程序了.       
再来,反正脸皮厚

  1. #include <stdio.h>;
  2. #include <stdlib.h>;

  3. void MaxSum(int *m, int n)
  4. {
  5.     int i, start=0, end=0, max, sum, istart=0, iend=0, sum2=0, start2=0;
  6.         max=m[0];
  7.         for(i=0;i<n && m[i]<=0;i++)
  8.         {
  9.                 if(m[i]>;max)
  10.                 {
  11.                         max=m[i];
  12.                         start=i;
  13.                 }
  14.         }
  15.         if(i==n)
  16.         {
  17.                 printf("start %d, end %d, sum %d\n", start, start, max);
  18.                 return;
  19.         }
  20.         end=start2=start=istart=i;//加了个END.因为发现如果只有一个正数时END有误.
  21.         for(i=n-1;i >;-1 && m[i]<=0;i--);
  22.         iend=i;
  23.         sum2=sum=max=m[start];
  24.         for(i=istart+1;i<=iend;i++)
  25.         {
  26.                 sum+=m[i];
  27.                 sum2+=m[i];
  28.                 if(sum>;max)
  29.                 {
  30.                         end=i;
  31.                         max=sum;
  32.                 }
  33.                 if(m[i-1]<=0 && m[i]>;0)
  34.                 {
  35.                         sum2=m[i];
  36.                         start2=i;
  37.                 }
  38.                 if(sum2>;max)
  39.                 {
  40.                         start=start2;
  41.                         end=i;
  42.                         sum=max=sum2;//这里又修改了.唉.惭愧.
  43.                 }
  44.         }
  45.     printf("start %d, end %d, sum %d\n", start, end, max);
  46. }
  47. int main()
  48. {
  49.     int m[10] = {2, 3, -6, 3, 4, 3, -2, 5, 2, -3};

  50.     MaxSum(m, 10);
  51.         return 0;
  52. }
复制代码

论坛徽章:
0
3 [报告]
发表于 2004-12-29 13:35 |显示全部楼层

求一个数组中最大的相邻元素之和

原帖由 "yuxh" 发表:
, 3, -6, 3, 4, 3, -7, 5, 3, -3};
start 3, end 5, sum 10

已经改了.嘿嘿.这次速度比你快一点.刚贴出来就看到错了......不过你F5的速度也太快了吧???

论坛徽章:
0
4 [报告]
发表于 2004-12-29 13:43 |显示全部楼层

求一个数组中最大的相邻元素之和

原帖由 "yuxh" 发表:
F5是啥东西?
我看你们两个的程序看得累死
    

习惯上把刷新说成"F5",呵呵,当年用IE落下的毛病.
我第一次贴出修改的程序,里面有你说的问题.但我在很短的时间内就修改了,竟然还是让你看到了,嘿嘿,所以说你的F5速度很快.
你的算法功底太强了,怎么学的?我现在设计算法,总会出错,然后一点一点修改,最后得到一个也不知道是不是正确的结果.不知道是不是因为太懒了,不肯从数学角度上考虑这个问题.

论坛徽章:
0
5 [报告]
发表于 2004-12-29 14:08 |显示全部楼层

求一个数组中最大的相邻元素之和

原帖由 "yuxh" 发表:
偶以前数学系的,大学里就学过BASIC
对于复杂一点的问题先在纸上列一下,把数学问题先搞清楚,不要急着写程序,不然出了问题也不知道什么问题,一点一点地改,把别人看出来的问题补掉,但也不明白最后还会不会出问�.........
受益匪浅啊.数学系出来的就是不一样.做程序果然很有前途.

论坛徽章:
0
6 [报告]
发表于 2004-12-29 17:03 |显示全部楼层

求一个数组中最大的相邻元素之和

老天啊,yuxh是不是还准备把程序简化到一两行?受不了了,很受伤,很受打击.aero,借个肩膀用一下.哇哇哇................

论坛徽章:
0
7 [报告]
发表于 2005-01-08 20:07 |显示全部楼层

求一个数组中最大的相邻元素之和

怎么可能啊。骗小孩的,guile也相信?

论坛徽章:
0
8 [报告]
发表于 2005-11-22 21:51 |显示全部楼层
顶起来。有朋友要。找得好苦。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP