如何用c语言从一组给定数中找到一个数或者几个数的和使其值最接近指定的数 大神快来 怎么用c语言自定义函数找出数组中与指定值最接近的数

\u5982\u4f55\u7528c\u8bed\u8a00\u4ece\u4e00\u7ec4\u7ed9\u5b9a\u6570\u4e2d\u627e\u5230\u4e00\u4e2a\u6570\u6216\u8005\u51e0\u4e2a\u6570\u7684\u548c\u4f7f\u5176\u503c\u6700\u63a5\u8fd1\u6307\u5b9a\u7684\u6570

\u53ea\u8981\u904d\u5386\u6570\u7ec4
\u7136\u540e\u5c06\u6bcf\u4e2a\u5143\u7d20\u4e0e\u8981\u67e5\u8be2\u7684\u503c\u8fdb\u884c\u76f8\u51cf
\u53d6\u51cf\u5f97\u7684\u7edd\u5bf9\u503c\u6700\u5c0f\u7684\u90a3\u4e2a\u5c31\u662f\u4e86

\u4e0b\u9762\u662f\u4e00\u4e2a\u7b80\u5355\u7684\u4ee3\u7801
#include
#include

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("\u4e0e5\u6700\u63a5\u8fd1\u7684\u6570\u662f: %d\n",find(a,20,5));

return 0;
}

\u53ea\u8981\u904d\u5386\u6570\u7ec4
\u7136\u540e\u5c06\u6bcf\u4e2a\u5143\u7d20\u4e0e\u8981\u67e5\u8be2\u7684\u503c\u8fdb\u884c\u76f8\u51cf
\u53d6\u51cf\u5f97\u7684\u7edd\u5bf9\u503c\u6700\u5c0f\u7684\u90a3\u4e2a\u5c31\u662f\u4e86

\u4e0b\u9762\u662f\u4e00\u4e2a\u7b80\u5355\u7684\u4ee3\u7801
#include #include 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("\u4e0e5\u6700\u63a5\u8fd1\u7684\u6570\u662f: %d\n",find(a,20,5)); return 0;}

1. 排除掉大于给定数的数字。

2. 对于剩余的n个数字,一一查询n个数的所有可能的和。
首先查询任意单个数字(Cn1个),然后查询任意两两的和(Cn2个),然后查询任意三三的和(Cn3个)……一直记录下当前最好结果,当最好结果恰好相等就输出,没找到就继续找。最坏情况下,需要一直查询到最后n个数字的和。所有的加起来一共计算2^n-1次。但是一般不会这么差。

和背包问题类似,这里将体积和价值等价就可以,下面是算法
设要找的数是C,给定的数在数组a[n]中
for i←0 to n
V[i,0]←0
end for
for j←0 to C
V[0,j]←0
end for
for i←1 to n
for j←1 to C
V[i,j]←V[i-1,j]
if a[i]<=j then V[i,j]←max{V[i,j],V[i-1],j-a[i]+a[i]}
end for
end for
return V[n,C]
时间复杂度是Θ(nC)
输出的就是最大值了
再简单修改一下就是取出的数
望采纳

  • c璇█闂 浠绘剰杈撳叆鍏朵腑涓涓暟,鏌ユ壘瀹冨湪鏁扮粍涓殑浣嶇疆
    绛旓細#include<stdio.h> int main() { int a[10]={20,40,50,70,80,10,15,25,45,100}; int i=0,b,c; char t,y,n; do { printf("璇疯緭鍏20,40,50,70,80,10,15,25,45,100鍗佷釜鏁颁腑浠绘剰涓涓:\n"); fflush(stdin); scanf("&d",&b); for(;i<=9;i++) { i... 灞曞紑 luo...
  • 濡備綍鐢╟璇█鍦涓缁勬暟涓鏌ユ壘涓涓拰宸茬煡鏁版渶鎺ヨ繎鐨勬暟鍊,鍍廵xcel涓殑hlook...
    绛旓細main(){ //瀹氫箟涓涓湁10涓厓绱犵殑涓缁鏁扮粍锛屽苟璧嬪硷紝10涓兼槸闅忎究鎵撶殑銆俿tatic float a[10]={2.1,3.5,4.2,2.2,3.3,5.8,6.7,4.4,5.9,6.5} float b[10];//yzs鏄凡鐭ユ暟,min鏄渶灏忓兼墍鍦ㄧ殑i鍊 float yzs;int i,min;min=0;printf("璇疯緭鍏ュ凡鐭ユ暟:\n");scanf("%f",&yzs...
  • c璇█,鏌ユ壘鏁扮粍涓槸鍚﹀瓨鍦ㄦ煇涓暟?
    绛旓細浠庨鐩殑鍙欒堪鏉ョ湅锛岃繖涓嚱鏁扮殑鍔熻兘灏辨槸杩欎竴涓寘鍚湁len涓厓绱犵殑num鏁扮粍涓煡鎵炬槸鍚﹀瓨鍦ㄥ间负key鐨勫厓绱犮傚彲浠ュ湪鎵惧埌鍚庤繑鍥炶鍏冪礌鐨勪笅鏍囷紝鍚﹀垯杩斿洖-1銆傝繖涓嚱鏁扮殑鍑芥暟浣撳彲浠ヨ繖涔堝啓锛歩nt i;for(i=0;i<len;i++)if(num[i]==key)return i;return -1;鐒跺悗鍦ㄤ富鍑芥暟涓殑鏌ユ壘璇彞鍙互杩欎箞鍐欙細if(searchNum...
  • C璇█绋嬪簭缂栧啓:鍦ㄦ湁搴忕殑鏁板垪涓煡鎵炬煇鏁,鑻ヨ鏁板湪姝ゆ暟鍒椾腑,鍒欒緭鍑哄畠鎵...
    绛旓細涔嬪墠鍐欒繃涓涓▼搴忕被浼肩殑锛屼綘鍙互鐢ㄤ綔鍙傝冿細棰樼洰锛氳瘯缂栧啓涓涓▼搴忓畬鎴愶細鏈15涓暟鎸変粠涓嬪埌澶х殑椤哄簭瀛樻斁鍦ㄤ竴涓暟缁勪腑锛庤緭鍏ヤ竴涓暟锛岃姹傛姌鍗婃煡鎵炬硶鎵惧嚭璇ユ暟鏄暟缁勪腑绗嚑涓厓绱犵殑鍊硷紟濡傛灉璇ユ暟涓嶅湪鏁扮粍涓紝杈撳嚭鈥滀笉鍦ㄨ〃銆===涓嬮潰鏄C浠g爜锛屽叾涓暟缁勬病鏈夎璁′负褰曞叆锛岃屾槸鍥哄畾鏁扮粍=== //杈撳嚭鐨勫簭鍒楁槸...
  • c璇█缂栫▼,涓缁存暟缁,浠庢暟缁涓壘鏁
    绛旓細while (1){ flag = 0;printf("璇疯緭鍏ヨ鏌ユ壘鐨刵鐨勫硷細");scanf("%d", &n);for (i = 0; i < N; i++){ if (arr[i] == n){ flag = 1;printf("鏁扮粍涓瓨鍦ㄤ笌寰呮煡鎵剧殑n锛%d锛夌浉绛夌殑鏁扮粍鍏冪礌锛屽叾涓嬫爣涓猴細%d\n", n, i);} } if (flag==0)printf("鏈鎵惧埌n\n");} } ...
  • c璇█濡備綍浠庝竴缁鏁版嵁涓寫鍑洪偅浜涙渶澶х殑閮ㄥ垎
    绛旓細杩欎釜搴旇灏辨槸鎶婃渶澶ф暟鐨勪綅缃壘鍑烘潵锛岃涓嬫垜鐨勬兂娉曪細杩欎釜搴旇鏄瘮杈冪殑闂鍚э紝鍏堢粰涓彉閲忚褰曞綋鍓嶆槸绗嚑涓暟锛屽啀缁欎釜鍙橀噺璁版垚0锛屾妸绗竴涓暟璧嬪肩粰瀹冿紝鐒跺悗鍜屽悗闈㈢殑姣旇緝锛鎵惧埌澶х殑灏辩洿鎺ユ妸褰撳墠鐨勬暟鎹崲鎴愬綋鍓嶇殑鏁帮紝鍚﹀垯涓嶅彉锛岃褰曟浛鎹紙绛変簬鐨勪篃绠楋級鎯呭喌涓嬬殑浣嶇疆瀛樺叆鏁扮粍锛涙暟缁勪腑灏辨槸鏇挎崲鐨勪綅缃簡锛...
  • 鍦涓缁鏁版嵁涓鎬庢牱鏈蹇殑鎵惧埌鏈澶у? c璇█ 璋㈣阿
    绛旓細鍋囪瀹氫箟10涓暟 include"stdio.h"void main(){ int a[10],i,max,k;for(i=0;i<10;i++)scanf("%d",&a[i]);max=a[0];k=0;for(i=0;i<=9;i++)if(a[i]>max){max=a[i];k=i;} printf("max=%d,k=%d",max,k);getch();} 杩欐牱鍙互姹傚嚭鏁扮粍a涓渶澶у煎拰瀹冪殑涓嬫爣 ...
  • C璇█ 鐢ㄦ寚閽堢紪鍐欏湪鏁扮粍涓煡鎵炬寚瀹氬兼寚閽堢殑鍑芥暟
    绛旓細printf("%x %d",find(c,n),*(find(c,n)));/*绗竴涓负鍑芥暟杩斿洖鍦板潃锛岀浜屼釜涓哄嚱鏁拌繑鍥炲湴鍧閲岀殑鍊*/ getch();} 鍙﹀锛屾垜浠祴璇曚竴涓▼搴忔垨鑰呭嚱鏁版槸鍚︽纭笉鍦ㄤ簬鍏惰兘鍚︽纭繍琛岋紝鑰屽湪浜庡叾杩愯鐨勭粨鏋滄槸鍚︾鍚堟垜浠殑棰勬湡銆傞拡瀵逛笂杩扮▼搴忥紝娴嬭瘯鏂规硶濡備笅锛氳緭鍏ヤ换鎰忎竴涓暟锛屽鏋滆繖涓暟鍦鏁扮粍C鍐咃紝鐪嬫槸鍚...
  • c璇█濡備綍浠庝竴缁鏁版嵁涓寫鍑洪偅浜涙渶澶х殑閮ㄥ垎
    绛旓細杩欎釜搴旇灏辨槸鎶婃渶澶ф暟鐨勪綅缃壘鍑烘潵锛岃涓嬫垜鐨勬兂娉曪細杩欎釜搴旇鏄瘮杈冪殑闂鍚э紝鍏堢粰涓彉閲忚褰曞綋鍓嶆槸绗嚑涓暟锛屽啀缁欎釜鍙橀噺璁版垚0锛屾妸绗竴涓暟璧嬪肩粰瀹冿紝鐒跺悗鍜屽悗闈㈢殑姣旇緝锛鎵惧埌澶х殑灏辩洿鎺ユ妸褰撳墠鐨勬暟鎹崲鎴愬綋鍓嶇殑鏁帮紝鍚﹀垯涓嶅彉锛岃褰曟浛鎹紙绛変簬鐨勪篃绠楋級鎯呭喌涓嬬殑浣嶇疆瀛樺叆鏁扮粍锛涙暟缁勪腑灏辨槸鏇挎崲鐨勪綅缃簡锛...
  • 鐢–璇█缂栫▼:缂栧啓绋嬪簭,瑕佹眰鍦ㄦ棤搴忔暟缁勪腑鏌ユ壘缁欏畾鍊奸娆″嚭鐜扮殑浣嶇疆...
    绛旓細缂栧啓绋嬪簭,瑕佹眰鍦ㄦ棤搴忔暟缁勪腑鏌ユ壘缁欏畾鍊奸娆″嚭鐜扮殑浣嶇疆銆備緥濡,鏁扮粍涓:a[10]=10 1 20 39 9 4 12 43 33 4,瑕佹煡鎵剧殑鏁:4,杈撳嚭:鍏朵綅缃:5,鑻ュ湪鏁扮粍涓病鎵惧埌璇ユ暟,鍒欒緭鍑:4鍦ㄨ鏁扮粍涓笉瀛樺湪銆俵kyku2009 | 娴忚988 娆 |涓炬姤 鎴戞湁鏇村ソ鐨勭瓟妗堟帹鑽愪簬2017-12-16 18:08:28 鏈浣崇瓟妗 int find(int *a,int...
  • 扩展阅读:扫一扫题目出答案 ... 扫描不会的题目出答案 ... 扫描计数 ... c++青少年编程课 ... 手机扫一扫自动算数 ... c#手机编程软件 ... 少儿c++编程视频 ... 手机上写c#程序的软件 ... c#语言 ...

    本站交流只代表网友个人观点,与本站立场无关
    欢迎反馈与建议,请联系电邮
    2024© 车视网