全球主机交流论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

CeraNetworks网络延迟测速工具IP归属甄别会员请立即修改密码
查看: 1589|回复: 10
打印 上一主题 下一主题

一个排列算法题目

[复制链接]
1#
发表于 2012-9-16 13:41:16 | 只看该作者
虽然看不懂你在说什么,不是貌似很牛逼的样子
2#
 楼主| 发表于 2012-9-16 12:31:20 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
今天做了一个算法题目:
要求输入n个A,m个B,打印出由这些AB组成的字串。比如2个A,2个B: AABB ABAB ABBA BAAB BABA BBAA
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <math.h>
  4. int total=0;
  5. //void num_fun(int num, int *p0, int *p1)
  6. int num_fun(int num, int *p, char *q)
  7. {
  8.      int i=0,j=0;
  9.      while(num!=0)
  10.      {
  11.          if (num%2==1)
  12.          {
  13.              i++;
  14.              q[j]=1;
  15.          }
  16.          else
  17.            q[j] = 0;
  18.          j++;
  19.          num /= 2;
  20.      }
  21.      *p=j;
  22.      return i;
  23. }

  24. void print(unsigned long long kangqi, int bit_total, char *p)
  25. {
  26.      int i;
  27.      if(bit_total < total)
  28.      {
  29.          for(i=0;i<total-bit_total;i++)
  30.          {
  31.              printf("B");
  32.          }
  33.      }
  34.      while(bit_total!=0)
  35.      {
  36.          if(p[bit_total-1]==1)
  37.          {
  38.              printf("a");
  39.          } else
  40.          {
  41.              printf("b");
  42.          }
  43.          bit_total -- ;
  44.      }
  45. printf(" ");

  46. }

  47. int main()
  48. {
  49.      int a,b,i,bit_total=0;
  50.      char *p;
  51.      unsigned long long kangqi;
  52.      scanf("%d,%d",&a,&b);
  53.      total = a+b;
  54.      p = (char *)malloc(total);
  55.      kangqi = pow(2,total)-1;
  56.      while(kangqi!=0)
  57.      {
  58.          bit_total = 0;
  59.          if (a==num_fun(kangqi,&bit_total,p))
  60.          {
  61.              print(kangqi,bit_total,p);
  62.          }
  63.          kangqi--;
  64.      }

  65.      return 0;
  66. }
复制代码
开始我计划使用递归的思想来处理,但是我想了老半天,递归没有出路,两位师傅有没有高招?

最后我采用自己的常规思维,把ab当成10来看待,使用2进程和10进程之间的转化完成了。

算法。。。。。。。
3#
发表于 2012-9-16 12:33:32 | 只看该作者
(⊙o⊙)…
虽然看不懂你在说什么,不是貌似很牛逼的样子
4#
发表于 2012-9-16 12:33:47 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
5#
发表于 2012-9-16 12:34:56 | 只看该作者
虽不懂但觉厉...
6#
发表于 2012-9-16 12:44:25 | 只看该作者
多重集排列
7#
发表于 2012-9-16 12:50:43 | 只看该作者
不会了 哎
8#
发表于 2012-9-16 15:17:07 | 只看该作者
必须C?不能C++?
如果C++,直接next_permutation
9#
发表于 2012-9-16 15:18:03 | 只看该作者
我是菜鳥
10#
发表于 2012-9-16 15:21:03 | 只看该作者
真想写?  我就去写一个。。还是只是灌水。。。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|全球主机交流论坛

GMT+8, 2025-11-8 11:28 , Processed in 0.075183 second(s), 11 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表