这题怎么样?求建议
已知一些正整数,再给出一个整数,计算它是由那些给出的整数的和,若没有,那么最接近他的最小数,和最近进他的最大数是多少。
例如:随机数3,9,8,17,20,14。
给出12,算得3+9。如给出19,最接近它的最小数是9+8或17,最接近它的最大数是20。
我写的部分代码
#include<stdio.h>
#define N 6
void xiangjin(int a[N],int k)
{
int i,j,t,t1,t2=0,t3;/* t1存储一个最相近的最小数,
t2储存一个最相近的最大数,
t3存储两个数相加与其最相近的最大数 */
printf("不存在两个数与输入数相等,则求相近数\n");
for(i=0;i<N;i++)
{
if(a[i]<k)
t1=a[i];
else
{
t2=a[i];
break;
}
}
if(t2!=0)
{
for(i=0;i<N-1;i++)
{
for(j=1;j<N;j++)
{
if(a[i]+a[j]>k)
{
t3=a[i]+a[j];
if(t2<t3)
printf("最相近的最大数为: %d\n",t2);
else if(t2==t3)
printf("最相近的最大数为: %d + %d 或 %d\n",a[i],a[j],t2);
else
printf("最相近的最大数为: %d + %d\n",a[i],a[j]);
break;
}
}
}
}
}
void main()
{
int i,j,k,a[N];
printf("输入6个随机数: ");
for(i=0;i<N;i++)
scanf("%d",&a[i]);//输入6个随机
printf("\n");
printf("输入一个整数: ");
scanf("%d",&k);
for(i=0;i<N;i++)
{
if(a[i]==k)
{
printf("存在一个数与输入数相等,输出: %d\n",a[i]);
exit(0);
}
}
for(i=0;i<N-1;i++)
{
for(j=1;j<N;j++)
{
if(a[i]+a[j]==k)
{
printf("存在两数相加与输入数相等,输出: %d + %d = %d\n",a[i],a[j],k);
exit(0);
}
}
}
xiangjin(a,k);
}
还没有求最相近的最小数,但我发现一个大问题,如果那些随机数不同答案就有错了,,,求改进或另外好的代码解决