谁能帮我解释一段程序!??

gongzhi493712874 2009-12-11 08:58:13

这是求一个排序了的数组里最大的一个数能用数组中的两个数之和表示,比如数组1 2 3 4 5 99再大的是5 ,能用1+5
void proc(int n)
{
int i,x,y;
for(i=n-1;i>=2;i--)
{
y=i-1;x=0;
while(y>x)
{
while(a[x]+a[y]<a[i]&&y>x)x++;
while(a[x]+a[y]>a[i]&&y>x)y--;
if(a[x]+a[y]==a[i])
{
printf("%d\n",a[i]);return;
}
}
}
printf("0\n");
}
...全文
80 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
sduxiaoxiang 2009-12-11
  • 打赏
  • 举报
回复
有点快排的意思
z569362161 2009-12-11
  • 打赏
  • 举报
回复
没看明白你要得到什么?
sduxiaoxiang 2009-12-11
  • 打赏
  • 举报
回复
从最后一个数开始直到第二个数

对每个数a[i]
如果a[y]+a[x]的和小于a[i],则需要增大a[x]的值。。x++
同理大于则减小a[y]。。
相等则输出返回
liubuweiright 2009-12-11
  • 打赏
  • 举报
回复
不太明白,也不会做,你的程序运行过来结果是

1 + 4 = 5
1 + 3 = 4
1 + 2 = 3







/* HELLO.C -- Hello, world */

#include "stdio.h"
#include "conio.h"
const int NUMBERS=5;
int a[5] ={1,2,3,4,5};
void proc(int n)
{
int i,x,y;
for(i=n-1;i>=2;i--)
{
y=i-1;x=0;
while(y>x)
{
while(a[x]+a[y] <a[i]&&y>x)x++;
while(a[x]+a[y]>a[i]&&y>x)y--;
if(a[x]+a[y]==a[i])
{
printf("%d + %d = %d \n",a[x],a[y],a[i]);
break;
}
}
}

}
main()
{
int i = 5 ;
proc(i);
getch();
}
deng1243 2009-12-11
  • 打赏
  • 举报
回复

void proc(int n)
{
int i,x,y;
for(i=n-1;i>=2;i--) //数组里循环
{
y=i-1;x=0;
while(y>x)
{
while(a[x]+a[y]<a[i]&&y>x)//找到小的最合适的a[x]
x++;
while(a[x]+a[y]>a[i]&&y>x)//找到大的最合适的a[y]
y--;
if(a[x]+a[y]==a[i])//找到则输出
{
printf("%d\n",a[i]);
return;
}
}
}
printf("0\n");
}

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧