| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 722 人关注过本帖, 1 人收藏
标题:还是排列!
只看楼主 加入收藏
有容就大
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:东土大唐
等 级:版主
威 望:74
帖 子:9048
专家分:14309
注 册:2011-11-11
收藏
得分:0 
回复 10楼 lz1091914999
这个 不错 如果排列前给个序号就圆满了。

梅尚程荀
马谭杨奚







                                                       
2012-06-03 12:27
beyondyf
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:103
帖 子:3282
专家分:12654
注 册:2008-1-21
收藏
得分:25 
来支持一下有容。之前的算法完全可以解决有容的问题,不过,玩个新鲜的
程序代码:
#include<stdio.h>

void print_permutation(int n, int deep, int max)
{
    static int * p, c;
    int i, j, t;
    if(deep == 0)
    {
        p = (int *)malloc(n * sizeof(int));
        for(i = 0; i < n; i++) p[i] = i + 1;
        c = 0;
    }
    if(deep >= n)
    {
        printf("%4d : ", ++c);
        for(i = 0; i < n; printf("%-4d", p[i++]));
        puts("");
        return;
    }
    for(i = deep; i < n && c < max; i++)
    {
        t = p[deep]; p[deep] = p[i]; p[i] = t;
        print_permutation(n, deep + 1, max);
    }
    for(t = p[i = deep]; i < n - 1; i++) p[i] = p[i + 1];
    p[n - 1] = t;
    if(deep == 0) free(p);
}

int main()
{
    int n;
    while(scanf("%d", &n), n) print_permutation(n, 0, 200);
    return 0;
}

重剑无锋,大巧不工
2012-06-03 13:14
zklhp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:china
等 级:贵宾
威 望:254
帖 子:11485
专家分:33241
注 册:2007-7-10
收藏
得分:25 
Z:\>a
16
    1:    1   2   3   4   5   6   7   8   9  10  11  12  13  14  15  16
    2:    1   2   3   4   5   6   7   8   9  10  11  12  13  14  16  15
    3:    1   2   3   4   5   6   7   8   9  10  11  12  13  15  14  16
    4:    1   2   3   4   5   6   7   8   9  10  11  12  13  15  16  14
    5:    1   2   3   4   5   6   7   8   9  10  11  12  13  16  14  15
    6:    1   2   3   4   5   6   7   8   9  10  11  12  13  16  15  14
    7:    1   2   3   4   5   6   7   8   9  10  11  12  14  13  15  16
    8:    1   2   3   4   5   6   7   8   9  10  11  12  14  13  16  15
    9:    1   2   3   4   5   6   7   8   9  10  11  12  14  15  13  16
   10:    1   2   3   4   5   6   7   8   9  10  11  12  14  15  16  13
   11:    1   2   3   4   5   6   7   8   9  10  11  12  14  16  13  15
   12:    1   2   3   4   5   6   7   8   9  10  11  12  14  16  15  13
   13:    1   2   3   4   5   6   7   8   9  10  11  12  15  13  14  16
   14:    1   2   3   4   5   6   7   8   9  10  11  12  15  13  16  14
   15:    1   2   3   4   5   6   7   8   9  10  11  12  15  14  13  16
   16:    1   2   3   4   5   6   7   8   9  10  11  12  15  14  16  13
   17:    1   2   3   4   5   6   7   8   9  10  11  12  15  16  13  14
   18:    1   2   3   4   5   6   7   8   9  10  11  12  15  16  14  13
   19:    1   2   3   4   5   6   7   8   9  10  11  12  16  13  14  15
   20:    1   2   3   4   5   6   7   8   9  10  11  12  16  13  15  14
   21:    1   2   3   4   5   6   7   8   9  10  11  12  16  14  13  15
   22:    1   2   3   4   5   6   7   8   9  10  11  12  16  14  15  13
   23:    1   2   3   4   5   6   7   8   9  10  11  12  16  15  13  14
   24:    1   2   3   4   5   6   7   8   9  10  11  12  16  15  14  13
   25:    1   2   3   4   5   6   7   8   9  10  11  13  12  14  15  16
   26:    1   2   3   4   5   6   7   8   9  10  11  13  12  14  16  15
   27:    1   2   3   4   5   6   7   8   9  10  11  13  12  15  14  16
   28:    1   2   3   4   5   6   7   8   9  10  11  13  12  15  16  14
   29:    1   2   3   4   5   6   7   8   9  10  11  13  12  16  14  15
   30:    1   2   3   4   5   6   7   8   9  10  11  13  12  16  15  14
   31:    1   2   3   4   5   6   7   8   9  10  11  13  14  12  15  16
   32:    1   2   3   4   5   6   7   8   9  10  11  13  14  12  16  15
   33:    1   2   3   4   5   6   7   8   9  10  11  13  14  15  12  16
   34:    1   2   3   4   5   6   7   8   9  10  11  13  14  15  16  12
   35:    1   2   3   4   5   6   7   8   9  10  11  13  14  16  12  15
   36:    1   2   3   4   5   6   7   8   9  10  11  13  14  16  15  12
   37:    1   2   3   4   5   6   7   8   9  10  11  13  15  12  14  16
   38:    1   2   3   4   5   6   7   8   9  10  11  13  15  12  16  14
   39:    1   2   3   4   5   6   7   8   9  10  11  13  15  14  12  16
   40:    1   2   3   4   5   6   7   8   9  10  11  13  15  14  16  12
   41:    1   2   3   4   5   6   7   8   9  10  11  13  15  16  12  14
   42:    1   2   3   4   5   6   7   8   9  10  11  13  15  16  14  12
   43:    1   2   3   4   5   6   7   8   9  10  11  13  16  12  14  15
   44:    1   2   3   4   5   6   7   8   9  10  11  13  16  12  15  14
   45:    1   2   3   4   5   6   7   8   9  10  11  13  16  14  12  15
   46:    1   2   3   4   5   6   7   8   9  10  11  13  16  14  15  12
   47:    1   2   3   4   5   6   7   8   9  10  11  13  16  15  12  14
   48:    1   2   3   4   5   6   7   8   9  10  11  13  16  15  14  12
   49:    1   2   3   4   5   6   7   8   9  10  11  14  12  13  15  16
   50:    1   2   3   4   5   6   7   8   9  10  11  14  12  13  16  15
   51:    1   2   3   4   5   6   7   8   9  10  11  14  12  15  13  16
   52:    1   2   3   4   5   6   7   8   9  10  11  14  12  15  16  13
   53:    1   2   3   4   5   6   7   8   9  10  11  14  12  16  13  15
   54:    1   2   3   4   5   6   7   8   9  10  11  14  12  16  15  13
   55:    1   2   3   4   5   6   7   8   9  10  11  14  13  12  15  16
   56:    1   2   3   4   5   6   7   8   9  10  11  14  13  12  16  15
   57:    1   2   3   4   5   6   7   8   9  10  11  14  13  15  12  16
   58:    1   2   3   4   5   6   7   8   9  10  11  14  13  15  16  12
   59:    1   2   3   4   5   6   7   8   9  10  11  14  13  16  12  15
   60:    1   2   3   4   5   6   7   8   9  10  11  14  13  16  15  12
   61:    1   2   3   4   5   6   7   8   9  10  11  14  15  12  13  16
   62:    1   2   3   4   5   6   7   8   9  10  11  14  15  12  16  13
   63:    1   2   3   4   5   6   7   8   9  10  11  14  15  13  12  16
   64:    1   2   3   4   5   6   7   8   9  10  11  14  15  13  16  12
   65:    1   2   3   4   5   6   7   8   9  10  11  14  15  16  12  13
   66:    1   2   3   4   5   6   7   8   9  10  11  14  15  16  13  12
   67:    1   2   3   4   5   6   7   8   9  10  11  14  16  12  13  15
   68:    1   2   3   4   5   6   7   8   9  10  11  14  16  12  15  13
   69:    1   2   3   4   5   6   7   8   9  10  11  14  16  13  12  15
   70:    1   2   3   4   5   6   7   8   9  10  11  14  16  13  15  12
   71:    1   2   3   4   5   6   7   8   9  10  11  14  16  15  12  13
   72:    1   2   3   4   5   6   7   8   9  10  11  14  16  15  13  12
   73:    1   2   3   4   5   6   7   8   9  10  11  15  12  13  14  16
   74:    1   2   3   4   5   6   7   8   9  10  11  15  12  13  16  14
   75:    1   2   3   4   5   6   7   8   9  10  11  15  12  14  13  16
   76:    1   2   3   4   5   6   7   8   9  10  11  15  12  14  16  13
   77:    1   2   3   4   5   6   7   8   9  10  11  15  12  16  13  14
   78:    1   2   3   4   5   6   7   8   9  10  11  15  12  16  14  13
   79:    1   2   3   4   5   6   7   8   9  10  11  15  13  12  14  16
   80:    1   2   3   4   5   6   7   8   9  10  11  15  13  12  16  14
   81:    1   2   3   4   5   6   7   8   9  10  11  15  13  14  12  16
   82:    1   2   3   4   5   6   7   8   9  10  11  15  13  14  16  12
   83:    1   2   3   4   5   6   7   8   9  10  11  15  13  16  12  14
   84:    1   2   3   4   5   6   7   8   9  10  11  15  13  16  14  12
   85:    1   2   3   4   5   6   7   8   9  10  11  15  14  12  13  16
   86:    1   2   3   4   5   6   7   8   9  10  11  15  14  12  16  13
   87:    1   2   3   4   5   6   7   8   9  10  11  15  14  13  12  16
   88:    1   2   3   4   5   6   7   8   9  10  11  15  14  13  16  12
   89:    1   2   3   4   5   6   7   8   9  10  11  15  14  16  12  13
   90:    1   2   3   4   5   6   7   8   9  10  11  15  14  16  13  12
   91:    1   2   3   4   5   6   7   8   9  10  11  15  16  12  13  14
   92:    1   2   3   4   5   6   7   8   9  10  11  15  16  12  14  13
   93:    1   2   3   4   5   6   7   8   9  10  11  15  16  13  12  14
   94:    1   2   3   4   5   6   7   8   9  10  11  15  16  13  14  12
   95:    1   2   3   4   5   6   7   8   9  10  11  15  16  14  12  13
   96:    1   2   3   4   5   6   7   8   9  10  11  15  16  14  13  12
   97:    1   2   3   4   5   6   7   8   9  10  11  16  12  13  14  15
   98:    1   2   3   4   5   6   7   8   9  10  11  16  12  13  15  14
   99:    1   2   3   4   5   6   7   8   9  10  11  16  12  14  13  15
  100:    1   2   3   4   5   6   7   8   9  10  11  16  12  14  15  13
  101:    1   2   3   4   5   6   7   8   9  10  11  16  12  15  13  14
  102:    1   2   3   4   5   6   7   8   9  10  11  16  12  15  14  13
  103:    1   2   3   4   5   6   7   8   9  10  11  16  13  12  14  15
  104:    1   2   3   4   5   6   7   8   9  10  11  16  13  12  15  14
  105:    1   2   3   4   5   6   7   8   9  10  11  16  13  14  12  15
  106:    1   2   3   4   5   6   7   8   9  10  11  16  13  14  15  12
  107:    1   2   3   4   5   6   7   8   9  10  11  16  13  15  12  14
  108:    1   2   3   4   5   6   7   8   9  10  11  16  13  15  14  12
  109:    1   2   3   4   5   6   7   8   9  10  11  16  14  12  13  15
  110:    1   2   3   4   5   6   7   8   9  10  11  16  14  12  15  13
  111:    1   2   3   4   5   6   7   8   9  10  11  16  14  13  12  15
  112:    1   2   3   4   5   6   7   8   9  10  11  16  14  13  15  12
  113:    1   2   3   4   5   6   7   8   9  10  11  16  14  15  12  13
  114:    1   2   3   4   5   6   7   8   9  10  11  16  14  15  13  12
  115:    1   2   3   4   5   6   7   8   9  10  11  16  15  12  13  14
  116:    1   2   3   4   5   6   7   8   9  10  11  16  15  12  14  13
  117:    1   2   3   4   5   6   7   8   9  10  11  16  15  13  12  14
  118:    1   2   3   4   5   6   7   8   9  10  11  16  15  13  14  12
  119:    1   2   3   4   5   6   7   8   9  10  11  16  15  14  12  13
  120:    1   2   3   4   5   6   7   8   9  10  11  16  15  14  13  12
  121:    1   2   3   4   5   6   7   8   9  10  12  11  13  14  15  16
  122:    1   2   3   4   5   6   7   8   9  10  12  11  13  14  16  15
  123:    1   2   3   4   5   6   7   8   9  10  12  11  13  15  14  16
  124:    1   2   3   4   5   6   7   8   9  10  12  11  13  15  16  14
  125:    1   2   3   4   5   6   7   8   9  10  12  11  13  16  14  15
  126:    1   2   3   4   5   6   7   8   9  10  12  11  13  16  15  14
  127:    1   2   3   4   5   6   7   8   9  10  12  11  14  13  15  16
  128:    1   2   3   4   5   6   7   8   9  10  12  11  14  13  16  15
  129:    1   2   3   4   5   6   7   8   9  10  12  11  14  15  13  16
  130:    1   2   3   4   5   6   7   8   9  10  12  11  14  15  16  13
  131:    1   2   3   4   5   6   7   8   9  10  12  11  14  16  13  15
  132:    1   2   3   4   5   6   7   8   9  10  12  11  14  16  15  13
  133:    1   2   3   4   5   6   7   8   9  10  12  11  15  13  14  16
  134:    1   2   3   4   5   6   7   8   9  10  12  11  15  13  16  14
  135:    1   2   3   4   5   6   7   8   9  10  12  11  15  14  13  16
  136:    1   2   3   4   5   6   7   8   9  10  12  11  15  14  16  13
  137:    1   2   3   4   5   6   7   8   9  10  12  11  15  16  13  14
  138:    1   2   3   4   5   6   7   8   9  10  12  11  15  16  14  13
  139:    1   2   3   4   5   6   7   8   9  10  12  11  16  13  14  15
  140:    1   2   3   4   5   6   7   8   9  10  12  11  16  13  15  14
  141:    1   2   3   4   5   6   7   8   9  10  12  11  16  14  13  15
  142:    1   2   3   4   5   6   7   8   9  10  12  11  16  14  15  13
  143:    1   2   3   4   5   6   7   8   9  10  12  11  16  15  13  14
  144:    1   2   3   4   5   6   7   8   9  10  12  11  16  15  14  13
  145:    1   2   3   4   5   6   7   8   9  10  12  13  11  14  15  16
  146:    1   2   3   4   5   6   7   8   9  10  12  13  11  14  16  15
  147:    1   2   3   4   5   6   7   8   9  10  12  13  11  15  14  16
  148:    1   2   3   4   5   6   7   8   9  10  12  13  11  15  16  14
  149:    1   2   3   4   5   6   7   8   9  10  12  13  11  16  14  15
  150:    1   2   3   4   5   6   7   8   9  10  12  13  11  16  15  14
  151:    1   2   3   4   5   6   7   8   9  10  12  13  14  11  15  16
  152:    1   2   3   4   5   6   7   8   9  10  12  13  14  11  16  15
  153:    1   2   3   4   5   6   7   8   9  10  12  13  14  15  11  16
  154:    1   2   3   4   5   6   7   8   9  10  12  13  14  15  16  11
  155:    1   2   3   4   5   6   7   8   9  10  12  13  14  16  11  15
  156:    1   2   3   4   5   6   7   8   9  10  12  13  14  16  15  11
  157:    1   2   3   4   5   6   7   8   9  10  12  13  15  11  14  16
  158:    1   2   3   4   5   6   7   8   9  10  12  13  15  11  16  14
  159:    1   2   3   4   5   6   7   8   9  10  12  13  15  14  11  16
  160:    1   2   3   4   5   6   7   8   9  10  12  13  15  14  16  11
  161:    1   2   3   4   5   6   7   8   9  10  12  13  15  16  11  14
  162:    1   2   3   4   5   6   7   8   9  10  12  13  15  16  14  11
  163:    1   2   3   4   5   6   7   8   9  10  12  13  16  11  14  15
  164:    1   2   3   4   5   6   7   8   9  10  12  13  16  11  15  14
  165:    1   2   3   4   5   6   7   8   9  10  12  13  16  14  11  15
  166:    1   2   3   4   5   6   7   8   9  10  12  13  16  14  15  11
  167:    1   2   3   4   5   6   7   8   9  10  12  13  16  15  11  14
  168:    1   2   3   4   5   6   7   8   9  10  12  13  16  15  14  11
  169:    1   2   3   4   5   6   7   8   9  10  12  14  11  13  15  16
  170:    1   2   3   4   5   6   7   8   9  10  12  14  11  13  16  15
  171:    1   2   3   4   5   6   7   8   9  10  12  14  11  15  13  16
  172:    1   2   3   4   5   6   7   8   9  10  12  14  11  15  16  13
  173:    1   2   3   4   5   6   7   8   9  10  12  14  11  16  13  15
  174:    1   2   3   4   5   6   7   8   9  10  12  14  11  16  15  13
  175:    1   2   3   4   5   6   7   8   9  10  12  14  13  11  15  16
  176:    1   2   3   4   5   6   7   8   9  10  12  14  13  11  16  15
  177:    1   2   3   4   5   6   7   8   9  10  12  14  13  15  11  16
  178:    1   2   3   4   5   6   7   8   9  10  12  14  13  15  16  11
  179:    1   2   3   4   5   6   7   8   9  10  12  14  13  16  11  15
  180:    1   2   3   4   5   6   7   8   9  10  12  14  13  16  15  11
  181:    1   2   3   4   5   6   7   8   9  10  12  14  15  11  13  16
  182:    1   2   3   4   5   6   7   8   9  10  12  14  15  11  16  13
  183:    1   2   3   4   5   6   7   8   9  10  12  14  15  13  11  16
  184:    1   2   3   4   5   6   7   8   9  10  12  14  15  13  16  11
  185:    1   2   3   4   5   6   7   8   9  10  12  14  15  16  11  13
  186:    1   2   3   4   5   6   7   8   9  10  12  14  15  16  13  11
  187:    1   2   3   4   5   6   7   8   9  10  12  14  16  11  13  15
  188:    1   2   3   4   5   6   7   8   9  10  12  14  16  11  15  13
  189:    1   2   3   4   5   6   7   8   9  10  12  14  16  13  11  15
  190:    1   2   3   4   5   6   7   8   9  10  12  14  16  13  15  11
  191:    1   2   3   4   5   6   7   8   9  10  12  14  16  15  11  13
  192:    1   2   3   4   5   6   7   8   9  10  12  14  16  15  13  11
  193:    1   2   3   4   5   6   7   8   9  10  12  15  11  13  14  16
  194:    1   2   3   4   5   6   7   8   9  10  12  15  11  13  16  14
  195:    1   2   3   4   5   6   7   8   9  10  12  15  11  14  13  16
  196:    1   2   3   4   5   6   7   8   9  10  12  15  11  14  16  13
  197:    1   2   3   4   5   6   7   8   9  10  12  15  11  16  13  14
  198:    1   2   3   4   5   6   7   8   9  10  12  15  11  16  14  13
  199:    1   2   3   4   5   6   7   8   9  10  12  15  13  11  14  16
  200:    1   2   3   4   5   6   7   8   9  10  12  15  13  11  16  14

1750 ms

我写的一个 对么。。
2012-06-03 14:20
beyondyf
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:103
帖 子:3282
专家分:12654
注 册:2008-1-21
收藏
得分:0 
回复 13楼 zklhp
这组结果没问题。不过效率差点。再优化一下。

重剑无锋,大巧不工
2012-06-03 15:26
lz1091914999
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:四川
等 级:贵宾
威 望:37
帖 子:2011
专家分:5959
注 册:2010-11-1
收藏
得分:25 
回复 11楼 有容就大
程序代码:
#include <stdio.h>
#include <math.h>

void Swap(int* p1, int* p2)
{
    int tmp = *p1; *p1 = *p2; *p2 = tmp;
}

void Reverse(int* start, int* end)
{
    while (start < end)
        Swap(start++, --end);
}

unsigned fac(unsigned n)
{
    unsigned i, result = 1;
    for (i = 2; i <= n; ++i)
        result *= i;
    return result;
}

int NextPermutation(int* start, int* end)
{
    int* p, *sp = end - 2;
    if (start >= end - 1)
        return 0;
    while (sp >= start) {
        if (sp[0] < sp[1])
            break;
        --sp;
    }
    if (sp < start) {
        Reverse(start, end);
        return 0;
    }
    for (p = end - 1; p > sp; --p)
        if (*p > *sp) {
            Swap(sp, p);
            break;
        }
    Reverse(sp + 1, end);
    return 1;
}

int main()
{
    unsigned lineNumber = 0;
    int array[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 }, n, i, width;
    char format[8]; /* %xxu:%3d */
    scanf("%d", &n);
    width = (int)log10(fac(n)) + 1;
    sprintf(format, "%%%du:%%3d", width);
    do {
        printf(format, ++lineNumber, array[0]);
        for (i = 1; i < n; ++i)
            printf("%3d", array[i]);
        putchar('\n');
    } while (NextPermutation(array, array + n));
    return 0;
}
这样可以了吧?

[ 本帖最后由 lz1091914999 于 2012-6-3 19:34 编辑 ]

My life is brilliant
2012-06-03 16:10
zklhp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:china
等 级:贵宾
威 望:254
帖 子:11485
专家分:33241
注 册:2007-7-10
收藏
得分:0 
9986:   1   2   3   4   5   6   7   8  10  16  15  11   9  12  14  13
 9987:   1   2   3   4   5   6   7   8  10  16  15  11   9  13  12  14
 9988:   1   2   3   4   5   6   7   8  10  16  15  11   9  13  14  12
 9989:   1   2   3   4   5   6   7   8  10  16  15  11   9  14  12  13
 9990:   1   2   3   4   5   6   7   8  10  16  15  11   9  14  13  12
 9991:   1   2   3   4   5   6   7   8  10  16  15  11  12   9  13  14
 9992:   1   2   3   4   5   6   7   8  10  16  15  11  12   9  14  13
 9993:   1   2   3   4   5   6   7   8  10  16  15  11  12  13   9  14
 9994:   1   2   3   4   5   6   7   8  10  16  15  11  12  13  14   9
 9995:   1   2   3   4   5   6   7   8  10  16  15  11  12  14   9  13
 9996:   1   2   3   4   5   6   7   8  10  16  15  11  12  14  13   9
 9997:   1   2   3   4   5   6   7   8  10  16  15  11  13   9  12  14
 9998:   1   2   3   4   5   6   7   8  10  16  15  11  13   9  14  12
 9999:   1   2   3   4   5   6   7   8  10  16  15  11  13  12   9  14
10000:   1   2   3   4   5   6   7   8  10  16  15  11  13  12  14   9

0 ms

怪不得效率差啊 输出太慢了。。

2012-06-03 17:59
有容就大
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:东土大唐
等 级:版主
威 望:74
帖 子:9048
专家分:14309
注 册:2011-11-11
收藏
得分:0 
几位高人 小弟佩服万分 哈哈。

梅尚程荀
马谭杨奚







                                                       
2012-06-03 23:00
快速回复:还是排列!
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.028929 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved