做个题

languagec 2008-09-24 10:51:19
假设一个数列有n个元素,一个数列的子数列是指在数列中任选m(0<m<=n) 个数组成的数列,如数列{1,2,3}的子数列有
{1}
{2}
{3}
{1,2}
{1,3}
{2,3}
{1,2,3}
数列的和是指数列中各个元素相加的值。
现在输入一个数NUM,求子数列的和与NUM 的最小的差值。
输入:
第一行输入数 n,代表数列的元素个数,第二行输入n个正整数,为数列的元素。
第三行输入数NUM
输出:
子数列与NUM 的最小差值

输入
3
1 2 3
8
输出
2
...全文
151 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
gdyjdao 2008-09-25
  • 打赏
  • 举报
回复
这题难点在第二行的输入上了,其实可以这样的:
个数不要输入了,直接输入第数列的值好了
include"math.h"
include"stdio.h"
void main(0)
{
long sum=0,x;
do{
scanf("%ld",&x);
sum+=x;
}while(getchar()!='\n')
scanf("%ld",&x);
sum=abs(sum-x);
printf("%ld',sum");
}
这就行了!!!
languagec 2008-09-25
  • 打赏
  • 举报
回复
呵呵
jieao111 2008-09-25
  • 打赏
  • 举报
回复

昨天晚上写得,现在才有电。至于c版的自己改吧,一个动态申请数组,我都不会了,呵呵只能用vector
#include <iostream> 
#include<bitset>
#include<vector>
using namespace std;
int ab(int m)
{
if(m<0)
return -m;
return m;
}

int main()
{
int n=0,m=0,num=0;
int sum=0,temp=0,max=100;
cin>>n;
vector<int>arry;
for(int i=0;i<n;++i)
{
cin>>m;
arry.push_back(m);

}
cin>>num;
bitset<32>x;
for(int i=0;i<1<<n;++i)
{
x=i;
sum=0;
for(int j=0;j<n;++j)
{
if(x[j])
sum+=arry[j];
}
temp=sum-num;
temp=ab(temp);
if(temp<max)
{
max=temp;

}
}
cout<<max<<endl;//这个输出差值

for(int j=0;j<n;++j)
if(x[j])
cout<<arry[j];//输出相应的组合

cout<<endl;

}
1>正在链接...
1>正在生成代码
1>已完成代码的生成
1>正在嵌入清单...
3
1 2 3
8
2
123
请按任意键继续. . .
xianyuxiaoqiang 2008-09-25
  • 打赏
  • 举报
回复
LS……迷惑
webtop1 2008-09-25
  • 打赏
  • 举报
回复
不好意思,刚才是c#的,现在改为vb
Private Sub ReadOrderData(ByVal connectionString As String)
Dim queryString As String = _
"SELECT OrderID, CustomerID FROM dbo.Orders;"

Using connection As New SqlConnection(connectionString)
Dim command As New SqlCommand(queryString, connection)
connection.Open()

Dim reader As SqlDataReader = command.ExecuteReader()

' Call Read before accessing data.
While reader.Read()
Console.WriteLine(String.Format("{0}, {1}", _
reader(0), reader(1)))
End While

' Call Close when done reading.
reader.Close()
End Using
End Sub
蘑菇摸骨 2008-09-25
  • 打赏
  • 举报
回复
想做饼子就面试啊!
ChamPagneZ 2008-09-25
  • 打赏
  • 举报
回复

//先Mark
星羽 2008-09-25
  • 打赏
  • 举报
回复
// 这样好像快了些



#include "stdlib.h"
#include "math.h"

#define max_int 2147483647
#define min(a,b) (((a) < (b)) ? (a) : (b))

int get_min_dif(int* data, int cur_sum, int cnt, int num, int* min_dif)
{
int i = -1;

while (++i < cnt)
{
if (abs(cur_sum - num) > *min_dif && cur_sum - num > 0)
continue;
(*min_dif) = min(abs(cur_sum - num), *min_dif);
get_min_dif(data + 1, cur_sum, cnt - 1, num, min_dif);
if (abs(cur_sum + (*data)- num) > *min_dif && cur_sum - num > 0)
continue;
(*min_dif) = min(abs(cur_sum + (*data)- num), *min_dif);
get_min_dif(data + 1, cur_sum + (*data), cnt - 1, num, min_dif);
++i;
}
}

int main()
{
int* data = 0;
int cnt = 0;
int num = 0;
int i = 0;
int dif = max_int;

printf("input : \n");
scanf("%d", &cnt);

if (cnt <= 0)
return 1;

data = (int*)malloc(sizeof(int) * cnt);
while (i < cnt)
scanf("%d", &data[i++]);
scanf("%d", &num);

get_min_dif(data, 0, cnt, num, &dif);

printf("\noutput : \n%d\n", dif);

free(data);

return 0;
}



--------

运行

input :
10
1 2 3 4 5 6 7 8 9 10
58

output :
3




或许可以先排序,那样可能效率更高些
星羽 2008-09-25
  • 打赏
  • 举报
回复

随便写了个效率极其低的穷举法,你参考一些就是了


#include "stdlib.h"
#include "math.h"

#define max_int 2147483647
#define min(a,b) (((a) < (b)) ? (a) : (b))

int get_min_dif(int* data, int cur_sum, int cnt, int num, int* min_dif)
{
int i = 0;

while (i < cnt)
{
(*min_dif) = min(abs(cur_sum - num), *min_dif);
get_min_dif(data + 1, cur_sum, cnt - 1, num, min_dif);
(*min_dif) = min(abs(cur_sum + (*data)- num), *min_dif);
get_min_dif(data + 1, cur_sum + (*data), cnt - 1, num, min_dif);
++i;
}
}

int main()
{
int* data = 0;
int cnt = 0;
int num = 0;
int i = 0;
int dif = max_int;

printf("input : \n");
scanf("%d", &cnt);

if (cnt <= 0)
return 1;

data = (int*)malloc(sizeof(int) * cnt);
while (i < cnt)
scanf("%d", &data[i++]);
scanf("%d", &num);

get_min_dif(data, 0, cnt, num, &dif);

printf("\noutput : \n%d\n", dif);

free(data);

return 0;
}



----------------


运行

input :
5
1 2 3 4 5
18

output :
3

shtianhai 2008-09-24
  • 打赏
  • 举报
回复
没看明白,莫非就是把第二行输入数相加然后减掉第三行的数?
lw1a2 2008-09-24
  • 打赏
  • 举报
回复
看不懂
shtianhai 2008-09-24
  • 打赏
  • 举报
回复
来看看
昨日,11.19,最新整理了,第61-80,现在公布上传。 另加上之前公布的第1-60 ,在此一次汇总上传,以飨各位。 可以这么说,绝大部分的面试,都是这100 道系列的翻版, 此微软等公司数据结构+算法面试100 系列,是极具代表性的经典面试。 而,对你更重要的是,我自个还提供了答案下载,提供思路,呵。 所以,这份资料+答案,在网上是独一无二的。 ------------------------------------ 整理资源,下载地址: 答案系列: 1.[最新答案V0.3 版]微软等数据结构+算法面试100 [第21-40 答案] http://download.csdn.net/source/2832862 2.[答案V0.2 版]精选微软数据结构+算法面试100 [前20 ]--修正 http://download.csdn.net/source/2813890 //此份答案是针对最初的V0.1 版本,进行的校正与修正。 3.[答案V0.1 版]精选微软数据结构+算法面试100 [前25 ] http://download.csdn.net/source/2796735 目系列: 4.[第一部分]精选微软等公司数据结构+算法经典面试100 [1-40 ] http://download.csdn.net/source/2778852 5.[第1 -60 汇总]微软等数据结构+算法面试100 http://download.csdn.net/source/2826690 更多资源,下载地址: http://v_july_v.download.csdn.net/ 若你对以上任何目或任何答案,有任何问,欢迎联系我: My E-mail: zhoulei0907@yahoo.cn ------------- 作者声明: 本人July 对以上公布的所有任何目或资源享有版权。转载以上公布的任何一, 或上传百度文库资源,请注明出处,及作者我本人。 向你的厚道致敬。谢谢。 ---July、2010 年11 月20 日。 ------------------------------------------------------ 各位,若对以上100任何一道,或对已上传的任何一的答案, 有任何问,请把你的思路、想法,回复到此帖子上, 微软等100系列,永久维护地址(2010年11.26日): http://topic.csdn.net/u/20101126/10/b4f12a00-6280-492f-b785-cb6835a63dc9.html
作者:July、阿财。 时间:二零一一年十月十三日。 ------------------------------ 无私分享造就开源的辉煌。 今是二零一一年十月十三日,明日14日即是本人刚好开博一周年。在一周年之际,特此分享出微软面试 全部100答案的完整版,以作为对本博客所有读者的回馈。 一年之前的10月14日,一个名叫July 的人在一个叫csdn 的论坛上开帖分享微软等公司数据结构+算法 面试100,自此,与上千网友一起,一起思考,一起解答这些面试目,最终成就了一个名为:结构之法 算法之道的编程面试与算法研究并重的博客,如今,此博客影响力逐步渗透到海外,及至到整个互联网。 在此之前,由于本人笨拙,这微软面试100的答案只整理到了前60(第1-60答案可到本人资源下 载处下载:http://v_july_v.download.csdn.net/),故此,常有朋友留言或来信询问后面40的答案。只是 因个人认为:一、答案只是作为一个参考,不可太过依赖;二、常常因一些事情耽搁(如在整理最新的今年 九月、十月份的面试:九月腾讯,创新工场,淘宝等公司最新面试十三、十月百度,阿里巴巴,迅雷搜狗 最新面试十一);三、个人正在针对那100的写文章,多种思路,不断优化,即成程序员编程 艺术系列。自此,后面40的答案迟迟未得整理。且个人已经整理的前60的答案,在我看来,是有诸多问 与弊端的,甚至很多答案都是错误的。 互联网总是能给人带来惊喜。前几日,一位现居美国加州的名叫阿财的朋友发来一封邮件,并把他自己 的全部100的答案一并发予给我,自此,便似遇见了知己。十分感谢。 任何东西只有分享出来才更显其价值。本只需贴出后面40的答案,因为前60的答案本人早已整理上 传至网上,但多一种思路多一种参考亦未尝不可。特此,把阿财的答案再稍加整理番,然后把全部100的答 案现今都贴出来。若有任何问,欢迎不吝指正。谢谢。 上千上万的人都关注过此100,且大都都各自贡献了自己的思路,或回复于微软100维护地址上,或 回复于本博客内,人数众多,无法一一标明,特此向他们诸位表示敬意和感谢。谢谢大家,诸君的努力足以影 响整个互联网,咱们已经迎来一个分享互利的新时代。 感谢诸君,请享用.....
火爆出炉:微软等数据结构+算法面试100首次完整亮相 ---100V0.1版最终完成 作者:July 2010年12月6日 微软等100系列V0.1版终于结束了。 从2010年10月11日当天最初发表前40以来,直至此刻,整理这100,已有近2个月。 2个月,因为要整理这100,很多很多其它的事都被我强迫性的搁置一旁, 如今,要好好专心去因这100而被耽误的、其它的事了。 这微软等数据结构+算法面试100系列(目+答案),到底现在、或此刻、或未来, 对初学者有多大的意义,在此,我就不给予评说了。 由他们自己来认定。所谓,公道自在人心,我相信这句话。 任何人,对以下任何资料、目、或答案,有任何问,欢迎联系我。 作者邮箱: zhoulei0907@yahoo.cn 作者声明: 转载或引用以下任何资料、或目,请注明作者本人July及出处。 向您的厚道致敬,谢谢。 好了,请享受这完完整整的100吧,这可是首次完整亮相哦。:D。 ............ ............ 答案系列: 5.[最新答案V0.3版]微软等数据结构+算法面试100[第21-40答案] http://download.csdn.net/source/2832862 6.[答案V0.2版]精选微软数据结构+算法面试100[前20]--修正 http://download.csdn.net/source/2813890 //此份答案是针对最初的V0.1版本,进行的校正与修正。 7.[答案V0.1版]精选微软数据结构+算法面试100[前25] http://download.csdn.net/source/2796735 剩下的第41-100答案,正在整理中。预计明年整理公布。 请各位,细心的等待。谢谢。 更多资源,下载地址: http://v_july_v.download.csdn.net/ ================================== 更多详情,请参见本人博客: My Blog: http://blog.csdn.net/v_JULY_v --------------------------------------------------------------------------------------- 各位,若对以上100任何一道,或对已上传的任何一的答案, 有任何问,请把你的思路、想法,回复到此帖子上, 微软等100系列,永久维护地址(2010年11.26日): http://topic.csdn.net/u/20101126/10/b4f12a00-6280-492f-b785-cb6835a63dc9.html

69,382

社区成员

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

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