如何用c语言从一组给定数中找到一个数或者几个数的和使其值最接近指定的数

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何用c语言从一组给定数中找到一个数或者几个数的和使其值最接近指定的数相关的知识,希望对你有一定的参考价值。

如何用c语言从一组给定数中找到一个数或者几个数的和使其值最接近指定的数

只要遍历数组
然后将每个元素与要查询的值进行相减
取减得的绝对值最小的那个就是了

下面是一个简单的代码
#include <stdio.h>
#include <stdlib.h>

int find(int *a,int n,int x)

int i;
int min=abs(*a-x);
int r=0;

for(i=0;i < n;++i)

if(abs(a[i]-x) < min)

min=abs(a[i]-x);
r=i;



return a[r];


int main(int argc,char **argv)

int a[20];
int i;

for(i=0;i < 20;++i)

a[i]=rand()%20;
printf("%d ",a[i]);

printf("\n");

printf("与5最接近的数是: %d\n",find(a,20,5));

return 0;
参考技术A 只要遍历数组
然后将每个元素与要查询的值进行相减
取减得的绝对值最小的那个就是了

下面是一个简单的代码
#include <stdio.h>
#include <stdlib.h>

int find(int *a,int n,int x)

int i;
int min=abs(*a-x);
int r=0;

for(i=0;i < n;++i)

if(abs(a[i]-x) < min)

min=abs(a[i]-x);
r=i;



return a[r];


int main(int argc,char **argv)

int a[20];
int i;

for(i=0;i < 20;++i)

a[i]=rand()%20;
printf("%d ",a[i]);

printf("\n");

printf("与5最接近的数是: %d\n",find(a,20,5));

return 0;
追问

这是拿指定值和数组里面的每个值比较,取出最接近的值。。还有一种情况是数组里面几个值相加会更接近!这种情况没有考虑。。?

求一段C语言程序,主要是比较两个数据组。

1、有一个数据组或者是数据文件A=a c e g i;b d f h a;s t e h k;……共有m组数据,且每组数据都由五个字母组成;
2、有另一个数据组或者是数据文件B=(a c e g i;b d f h j;s t d g n;……)共有n组数据,且每组数据都由五个字母组成;
3、m>n;
要求:比较A与B中的数据组,若A中的有一组数与B组中任一组数中的4个数据相同,则从A中将该组数删除;最后显示A。

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
typedef struct link

char a[6];
link *next;
link *pre;
link;
/*输入数据组的函数*/
void input(link *x,int num)

int i,j;
printf("一组的数据:");
getchar();
gets(x->a);
x->pre=NULL;
link *q=x;
for(j=0;j<num-1;j++)

link *p=(link *)malloc(sizeof(link));
gets(p->a);
q->next=p;
p->pre=q;
q=p;

q->next=NULL;

/*输出*/
void output(link *x)

int i;
link *p=x;
printf("结果为:\n");
for(;p!=NULL;)

puts(p->a);
p=p->next;


/*比较*/
link * compare(link *x1,link *x2)

link *bian1=(link *)malloc(sizeof(link));
link *bian2=(link *)malloc(sizeof(link));
link *p=x1;
link *q=x2;
for(;p!=NULL;p=p->next)

for(q=x2;q!=NULL;q=q->next)

if(strcmp(p->a,q->a)==0)

if((p->pre!=NULL)&&(p->next!=NULL))

bian1=p->pre;
bian2=p->next;
bian1->next=bian2;
bian2->pre=bian1;

else if(p->pre==NULL)

x1=x1->next;
x1->pre=NULL;

else

bian1=p->pre;
bian1->next=NULL;




return(x1);

void main()

link *x1=(link *)malloc(sizeof(link));
link *x2=(link *)malloc(sizeof(link));
int num1,num2;
printf("输入第一组数据的个数:");
scanf("%d",&num1);
input(x1,num1);
printf("输入第二组数据的个数:");
scanf("%d",&num2);
input(x2,num2);
x1=compare(x1,x2);
output(x1);

这是输入样例及答案,你可以参考一下,按照我的输入格式来编辑你的输入数据测试:
输入第一组数据的个数:3
一组的数据:asdfg
qwert
zxcvb
输入第二组数据的个数:2
一组的数据:asdfg
zxcvb
结果为:
qwert
Press any key to continue
参考技术A 工程浩大,要时间 参考技术B ===看答案

以上是关于如何用c语言从一组给定数中找到一个数或者几个数的和使其值最接近指定的数的主要内容,如果未能解决你的问题,请参考以下文章

如何用c#从一组数中随机抽取数字?

从一堆数中随机取出几个数

如何从一堆数中选出若干个数,使其和等于给定的数?

如何用C语言求1至100所有素数的和?

求一段C语言程序,主要是比较两个数据组。

如何用c语言编程,判断一个三位数是不是为顺子(不是顺子直接提示出错)?