如何用c语言从一组给定数中找到一个数或者几个数的和使其值最接近指定的数
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何用c语言从一组给定数中找到一个数或者几个数的和使其值最接近指定的数相关的知识,希望对你有一定的参考价值。
从一组给定数中找到一个数或者几个数的和使其值等于一个数,如果无法找到,那么就让他们的值最接近某个数但是一定要小于那个数,告诉我大体思路就行
1. 排除掉大于给定数的数字。2. 对于剩余的n个数字,一一查询n个数的所有可能的和。
首先查询任意单个数字(Cn1个),然后查询任意两两的和(Cn2个),然后查询任意三三的和(Cn3个)……一直记录下当前最好结果,当最好结果恰好相等就输出,没找到就继续找。最坏情况下,需要一直查询到最后n个数字的和。所有的加起来一共计算2^n-1次。但是一般不会这么差。 参考技术A 和背包问题类似,这里将体积和价值等价就可以,下面是算法
设要找的数是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]←maxV[i,j],V[i-1],j-a[i]+a[i]
end for
end for
return V[n,C]
时间复杂度是Θ(nC)
输出的就是最大值了
再简单修改一下就是取出的数
望采纳本回答被提问者采纳
如何用C语言判断一个数是不是为递增数
任意输入一个正整数,输出这个数是不是递增数。递增数的定义为:对于n=d1d2d3…dk,满足di<=di+1(1<=i<=k-1)
编程思想。1.根据定义,递增数就是低位数字大于等于高位数字。2.一个整数可以通过模十取余得到个位数字,通过除十取整得到去掉个位数的整数。3.比较个位跟十位数字,如果个位小于十位,就不是递增数。如果个位大于十位,是递增数。 参考技术A int main()char num = '\\0';
int count = 0;
int buff[50] = 0;
while (scanf("%c", &num) && num!='\\n')
buff[count] = num - '0';
if (count == 0)
++count;
continue;
if (buff[count] < buff[count - 1])
printf("不是递增数");
return -1;
++count;
printf("是递增数");
return 0;
其实...简单判断一下就行了...昨天我是刚好练习写了一下排序算法
就想着直接用了 但是没必要
参考技术B int main()/* //字符数组方法
char ch[20];
scanf("%s",ch);
int i,n=ch[0],yes=1;
for(i=1;ch[i]!='\\0';i++)
if(ch[i]-1==n)
n++;
else
yes=0;
break;
if(yes==1) printf("yes");
else printf("no");*/
//数字分解方法
int n,s;
scanf("%d",&n);
s=n%10;
n/=10;
while(n>0)
if(n%10==s-1)
s=n%10;
n/=10;
else
printf("no");
return 0;
printf("yes");
return 0;
本回答被提问者采纳 参考技术C 如果你的输入是一个long或int,依次对10取模,得到的结果存在临时变量tmp中,然后与之前的变量比较大小,如果大就继续取模,否则直接跳出.
如果你的输入是一个字符串,就从前到后依次比较字符的ascii码大小,如果后一个比前一个大就继续,否则就跳出 参考技术D #include <stdio.h>
#include <string.h>
#define MAXLEN 256
int func(const char* str)
for(int i = 1;i < strlen(str);i++)
if(str[i-1] > str[i])
return 0;
return 1;
int main(int argc, char** argv)
char s_num[MAXLEN];
scanf("%s", s_num);
printf("%s\\n", func(s_num)?"Yes":"No");
return 0;
以上是关于如何用c语言从一组给定数中找到一个数或者几个数的和使其值最接近指定的数的主要内容,如果未能解决你的问题,请参考以下文章