论坛首页 招聘求职论坛

求职或不求职的都来做题啦(零分党提供,拒绝儿童题目)

浏览 2662 次
精华帖 (0) :: 良好帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2008-12-19   最后修改:2008-12-19
我先来第一个
写一个遍历组合数的方法(任意语言实现),如:
function combine(array,m){ 
//................. 
return rusult; 
} 
如果array是[1,2,3],m为2,则返回的result应该是[[1,2],[1,3],[2,3]];

补充:从m个不同元素中取出n(n≦m)个元素的所有组合的个数,叫做从m个不同元素中取出n个元素的组合数。
   发表时间:2008-12-19  
http://laiseeme.iteye.com/admin/blogs/179054
0 请登录后投票
   发表时间:2008-12-19  
再出一基础题,写一正则表达式,要求匹配这样这的格式:
1,是三个数字
2,这三个数字有两个是相同的,另一个不相同
如:112,565,889都能匹配,但123,666不能匹配。
0 请登录后投票
   发表时间:2008-12-19  

(define (kombine items m)
  (cond ((null? items) (list '()))
	((= m 1) items)
	(else (flatmap (lambda (x)
			 (map (lambda (p)
				(if (> m 2)
				    (cons x p)
				    (cons x (cons p '()))))
			      (kombine (remove x items) (- m 1))))
		       items))))


(define (remove item sequence)
  (filter (lambda (x) (not (= x item)))
          sequence))


(kombine '(1 2 3 4 5) 4)


((1 2 3 4) (1 2 3 5) (1 2 4 3) (1 2 4 5) (1 2 5 3) (1 2 5 4) (1 3 2 4) (1 3 2 5) (1 3 4 2) (1 3 4 5) (1 3 5 2) (1 3 5 4) (1 4 2 3) (1 4 2 5) (1 4 3 2) (1 4 3 5) (1 4 5 2) (1 4 5 3) (1 5 2 3) (1 5 2 4) (1 5 3 2) (1 5 3 4) (1 5 4 2) (1 5 4 3) (2 1 3 4) (2 1 3 5) (2 1 4 3) (2 1 4 5) (2 1 5 3) (2 1 5 4) (2 3 1 4) (2 3 1 5) (2 3 4 1) (2 3 4 5) (2 3 5 1) (2 3 5 4) (2 4 1 3) (2 4 1 5) (2 4 3 1) (2 4 3 5) (2 4 5 1) (2 4 5 3) (2 5 1 3) (2 5 1 4) (2 5 3 1) (2 5 3 4) (2 5 4 1) (2 5 4 3) (3 1 2 4) (3 1 2 5) (3 1 4 2) (3 1 4 5) (3 1 5 2) (3 1 5 4) (3 2 1 4) (3 2 1 5) (3 2 4 1) (3 2 4 5) (3 2 5 1) (3 2 5 4) (3 4 1 2) (3 4 1 5) (3 4 2 1) (3 4 2 5) (3 4 5 1) (3 4 5 2) (3 5 1 2) (3 5 1 4) (3 5 2 1) (3 5 2 4) (3 5 4 1) (3 5 4 2) (4 1 2 3) (4 1 2 5) (4 1 3 2) (4 1 3 5) (4 1 5 2) (4 1 5 3) (4 2 1 3) (4 2 1 5) (4 2 3 1) (4 2 3 5) (4 2 5 1) (4 2 5 3) (4 3 1 2) (4 3 1 5) (4 3 2 1) (4 3 2 5) (4 3 5 1) (4 3 5 2) (4 5 1 2) (4 5 1 3) (4 5 2 1) (4 5 2 3) (4 5 3 1) (4 5 3 2) (5 1 2 3) (5 1 2 4) (5 1 3 2) (5 1 3 4) (5 1 4 2) (5 1 4 3) (5 2 1 3) (5 2 1 4) (5 2 3 1) (5 2 3 4) (5 2 4 1) (5 2 4 3) (5 3 1 2) (5 3 1 4) (5 3 2 1) (5 3 2 4) (5 3 4 1) (5 3 4 2) (5 4 1 2) (5 4 1 3) (5 4 2 1) (5 4 2 3) (5 4 3 1) (5 4 3 2))
0 请登录后投票
   发表时间:2008-12-19   最后修改:2008-12-19
楼上是个递归版本,我提供个非递归的
        function combine(vec, m){
            var result = new Array();
            var vecm = new Array();
            var vecb = new Array();
            var mark;
            // 初始化
            for (var i = 0; i < m; i++) 
                vecm[i] = i;
            for (var i = 0; i < m - 1; i++) 
                vecb[i] = i;
            vecb[m - 1] = vec.length - 1;
            mark = m - 1;
            output();
            while (true) {
                if (mark == 0) {
                    vecm[0]++;
                    output();
                    if (vecm[0] == vecb[0]) {
                        for (i = 1; i < m; i++) {
                            if (vecm[i] < vecb[i]) {
                                mark = i;
                                break;
                            }
                        }
                        if ((i == m) && (vecm[m - 1] == vecb[m - 1])) {
                            break;
                        }// 结束
                    }
                }
                else {
                    vecm[mark]++;
                    mark--;
                    for (i = 0; i <= mark; i++) {
                        vecm[i] = i;
                        vecb[i] = i;
                    }
                    vecb[mark] = vecm[mark + 1] - 1;
                    output();
                }
            }
            function output(){
                var ct = new Array();
                for (i = 0; i < vecm.length; i++) {
                    ct.push(vec[vecm[i]]);
                }
                result.push(ct);
            }
            return result;
        }
0 请登录后投票
   发表时间:2008-12-19  
全冠清 写道
再出一基础题,写一正则表达式,要求匹配这样这的格式:
1,是三个数字
2,这三个数字有两个是相同的,另一个不相同
如:112,565,889都能匹配,但123,666不能匹配。

放答案
((\d)((?!\2)\d)\3)|((\d)\5((?!\5)\d))|((\d)((?!\8)\d)\8)
0 请登录后投票
论坛首页 招聘求职版

跳转论坛:
Global site tag (gtag.js) - Google Analytics