魔方吧·中文魔方俱乐部

 找回密码
 注册
搜索
热搜: 魔方
楼主: Osullivan
打印 上一主题 下一主题

数学高手编程高手进 [复制链接]

Rank: 3Rank: 3

积分
667
帖子
250
精华
0
UID
90901
性别
保密
21#
发表于 2009-6-2 22:55:58 |只看该作者

回复 20# 的帖子

我用的C……
有几个语句我没有仔细想……很傻瓜式的把条件罗列出来让点点自己算……
我高中只学了一点点pascal……现在基本忘完了……

使用道具 举报

红魔

ATG

Rank: 4

积分
1718
帖子
1420
精华
0
UID
82443
性别
居住地
西安市

四年元老

22#
发表于 2009-6-3 18:21:39 |只看该作者

回复 20# 的帖子

program ex;
var
  a,b,c,d,e,f,g,h,i:integer;
begin
for a:=1 to 9 do
for b:=1 to 9 do
  if b<>a then
for c:=1 to 9 do
  if(c<>a)and(c<>b)then
for d:=1 to 9 do
  if(d<>a)and(d<>b)and(d<>c)then
for e:=1 to 9 do
  if(e<>a)and(e<>b)and(e<>c)and(e<>d)then
for f:=1 to 9 do
  if(f<>a)and(f<>b)and(f<>c)and(f<>d)and(f<>e)then
for g:=1 to 9 do
  if(g<>a)and(g<>b)and(g<>c)and(g<>d)and(g<>e)and(g<>f)then
for h:=1 to 9 do
  if(h<>a)and(h<>b)and(h<>c)and(h<>d)and(h<>e)and(h<>f)and(h<>g)then
for i:=1 to 9 do
  if(i<>a)and(i<>b)and(i<>c)and(i<>d)and(i<>e)and(i<>f)and(i<>g)and(i<>h)then
   if a/(10*b+c)+d/(10*e+f)+g/(10*h+i)=1 then
    writeln(a,'/',10*b+c,'+',d,'/',10*e+f,'+',g,'/',10*h+i,'=1');
readln;
readln;
end.         
pascal 穷举

使用道具 举报

Rank: 2

积分
272
帖子
257
精华
0
UID
30652
性别
23#
发表于 2009-6-3 19:24:41 |只看该作者
本帖最后由 visvate 于 2014-11-4 18:42 编辑

         .

使用道具 举报

Rank: 7Rank: 7Rank: 7

积分
2520
帖子
3072
精华
7
UID
62890
性别

中国纪录 八年元老

24#
发表于 2009-6-3 21:55:18 |只看该作者

回复 22# 的帖子

只要用8个变量a到h就可以了
i=45-a-b-c-d-e-f-g-h

使用道具 举报

Rank: 7Rank: 7Rank: 7

积分
3923
帖子
2556
精华
6
UID
15558
性别
保密
WCA ID
2008CHEN27
兴趣爱好
理论

魔方理论探索者 国家(地区)纪录(NR) 十年元老

25#
发表于 2009-6-3 23:29:59 |只看该作者

回复 22# 的帖子

不用这样,直接用一个boolean数组表示某个数有没有用过,然后一部递归就行了。。你这样编程复杂度太大。。。9个数字还好,100个怎么办?(当然那样时间复杂度也超了,但如果有高效剪枝的话说不定还是可行的)

使用道具 举报

Rank: 7Rank: 7Rank: 7

积分
2520
帖子
3072
精华
7
UID
62890
性别

中国纪录 八年元老

26#
发表于 2009-6-4 08:46:09 |只看该作者
LS不愧是去年上海市NOIP第N名啊!
(注:我在 ★ 数学、算术趣题 ★ 里发帖的所有N都表示一个数)

使用道具 举报

Rank: 4

积分
1744
帖子
1304
精华
0
UID
9103
性别
27#
发表于 2009-6-4 19:31:47 |只看该作者
还是有高手的啊啊

使用道具 举报

Rank: 2

积分
528
帖子
270
精华
0
UID
8558
性别
28#
发表于 2009-6-9 08:39:49 |只看该作者
原帖由 r_517 于 2009-6-2 22:36 发表


完全是无稽之谈。。。首先9/12=3/4,其次根据平均数原理只能证明至少有一个数大于1/3。完全无法得到其他任何结论。为什么9/12 “一定要存在”。就不可能是9/13、9/14……之类的么?


9/12是3/4。
之前我是计算错了一点。

但总体思路应该没错。
我的意思是:
三个分数相加等于1,那么必有一个分数大于1/3
所以,
当你选择的第一个分数是小于1/3,那么后面的排列组合可以不考虑穷举了。

同理,前二个分数之和必定要大于1/2

这样的算法,比递归的计算量要小一些。

使用道具 举报

Rank: 2

积分
528
帖子
270
精华
0
UID
8558
性别
29#
发表于 2009-6-9 08:43:01 |只看该作者
原帖由 oboe 于 2009-6-9 08:39 发表

当你选择的第一个分数是小于1/3,那么后面的排列组合可以不考虑穷举了。

同理,前二个分数之和必定要大于1/2

...


补充一点,
把三个分数由大到小排列起来
第一个数是必大于1/3
改正一下:

把三个分数由大到小排列起来
前二个数之和必大于2/3

[ 本帖最后由 oboe 于 2009-6-9 08:53 编辑 ]

使用道具 举报

Rank: 3Rank: 3

积分
900
帖子
698
精华
1
UID
87298
性别
保密
30#
发表于 2009-6-9 22:24:06 |只看该作者
原帖由 oboe 于 2009-6-9 08:43 发表


补充一点,
要把三个分数由大到小排列起来,
第一个数是必大于1/3
改正一下:

要把三个分数由大到小排列起来,
前二个数之和必大于2/3



跟偶的想法一样哦~~~~~~~~
顶~~~~~

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

Archiver|手机版|魔方吧·中文魔方俱乐部

GMT+8, 2024-5-17 08:01

Powered by Discuz! X2

© 2001-2011 Comsenz Inc.

回顶部