作者wa007123456 (大笨羊)
看板Prob_Solve
标题Fw: [问题] 如何实做一个不会重复的"六进位"?
时间Fri Nov 11 18:11:40 2011
※ [本文转录自 C_and_CPP 看板 #1ElEpQow ]
作者: wa007123456 (大笨羊) 看板: C_and_CPP
标题: [问题] 如何实做一个不会重复的"六进位"?
时间: Fri Nov 11 17:37:27 2011
开发平台(Platform): (Ex: VC++, GCC, Linux, ...)
VC++
问题(Question):
是这样的,我想写一个程式,里面有1~6的字元
最高位数是6位,且阵列上的值不可重复
例如: arr[0][1][2][3][4][5] <=正确!
arr2[0][0][1][2][3][4] <=错误!
小弟其实想用程式去算出一个题目
就是有一个密码箱,有六个数字要填,其中1,2不能排首两位
3,4不能排中间两位 5,6不能排後面两位
我大概知道是6!=720 是全部的可能(未含条件)
而含条件後的答案是80 (经过排列组合的计算)
我已经想了一个下午了....
但是还是没有头绪 小弟我是个初学者@@
有请先辈们赐教>< 感谢
ps:这是我突发奇想的问题...
另外有没有大大可以推荐有关"资料结构"的书籍呢?
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 125.228.221.15
※ 编辑: wa007123456 来自: 125.228.221.15 (11/11 17:40)
1F:→ x000032001:排列组合喔... 11/11 17:43
2F:→ x000032001:我可以说版规2吗..XD 请附上自己的想法 11/11 17:45
可能要先写好排列组合常用的运算
像是C(X,Y) ,P(X)...还有数阶的函式(用递回)
但是最大的问题就是 程式没办法做"分类"的动作
他只能很暴力的算出来吧@@?
毕竟电脑是计算机.....但是不写出这题我不会死心的..
※ 编辑: wa007123456 来自: 125.228.221.15 (11/11 17:48)
3F:→ LawlietDo:才6!就六层loop 最後一层做判断 符合的话就输出阿.... 11/11 17:49
我也是写了六个for..
但是问题就是在..每位不能有重复的数字@@
不然判断 count 会多出许多不正确的答案@@
4F:→ james732:最暴力的方式就是把所有可能的解都生出来再删掉...XD 11/11 17:51
※ 编辑: wa007123456 来自: 125.228.221.15 (11/11 17:52)
5F:→ x000032001:开个阵列记录有没有被用过不就得了 11/11 17:52
6F:→ x000032001:搞成全域然後递回一下 就比for高级了"一点点".... 11/11 17:53
7F:→ tropical72:这不就是 next_perm 的东西吗? 11/11 17:54
8F:→ x000032001:对阿(死) 我是觉得你先把程式写出来 再去改他 11/11 17:54
9F:→ wa007123456:楼上@@ 那是甚麽? 11/11 17:55
10F:→ james732:我很不擅长这种问题耶,有需要加强吗...? 11/11 17:55
11F:→ tropical72:oh,有条件限制的,我的作法和 james 一样,合条件的话才 11/11 17:55
12F:→ x000032001:6个for也好阿 看看哪边重复 哪边多余 再做修正 11/11 17:55
13F:→ james732:原po可以拿「c++ next_permutation」去google看看 11/11 17:55
14F:→ wa007123456:阿 有一点头绪了! 11/11 17:56
15F:→ x000032001:让他练练吧 虽然我以前也都#include <algorithm> ... 11/11 17:56
16F:→ wa007123456:先记录全部的数字 把不合格的筛检 最後在弄上分类 11/11 17:56
17F:→ tropical72:加到 solution,类似的东西 :#1DU99hiU ,最後慢慢check. 11/11 17:56
18F:→ tropical72:补一下, 转去 Prob_Solve 可能较适合。 11/11 18:08
※ 发信站: 批踢踢实业坊(ptt.cc)
※ 转录者: wa007123456 (125.228.221.15), 时间: 11/11/2011 18:11:40
19F:推 springman:这让我想到大一时在写八皇后的问题,怎麽都想不出来 11/11 20:33
20F:→ springman:後来有人提到用递回,将所有情形都找出来 11/11 20:33
21F:→ springman:然後每一种检查是否符合条件 11/11 20:33
22F:→ springman:原以为只能这麽做,结果後来看到一位天才的同学 11/11 20:34
23F:→ springman:用八层回圈一样很快就跑出来,真的很天才。 11/11 20:34