华师一附中OI组

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 1623|回复: 2
打印 上一主题 下一主题

20151025讲义

[复制链接]

61

主题

147

帖子

563

积分

超级版主

Rank: 8Rank: 8

积分
563
跳转到指定楼层
楼主
发表于 2015-10-25 13:52:03 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
1、错排问题
  1. #include<iostream>
  2. using namespace std;
  3. int a[5],s=0;
  4. bool b[5];
  5. void mysearch(int i)
  6. {
  7.     int j,k;
  8.     if (i==5) {cout<<++s<<":";for (j=0;j<=4;j++) cout<<a[j];cout<<endl;}
  9.     else for (k=0;k<=4;k++)
  10.     if (b[k] && i!=k) {a[i]=k;b[k]=false;mysearch(i+1);b[k]=true;}
  11. }
  12. int main()
  13. {
  14.   for (int i=0;i<=4;i++) b[i]=true;
  15.   mysearch(0);
  16.   return 0;
  17. }
复制代码
回复

使用道具 举报

61

主题

147

帖子

563

积分

超级版主

Rank: 8Rank: 8

积分
563
推荐
 楼主| 发表于 2015-10-25 14:05:32 | 只看该作者
2、3个A 2个B 1个C 1个D 1个E全排列
  1. #include<iostream>
  2. using namespace std;
  3. const string ss="ABCDE";
  4. int a[8],s=0;
  5. int b[5];
  6. void mysearch(int i)
  7. {
  8.     int j,k;
  9.     if (i==8) {cout<<++s<<":";for (j=0;j<=7;j++) cout<<ss[a[j]];cout<<endl;}
  10.     else for (k=0;k<=5;k++)
  11.     if (b[k]>0) {a[i]=k;b[k]--;mysearch(i+1);b[k]++;}
  12. }
  13. int main()
  14. {
  15.   b[0]=3;b[1]=2;b[2]=b[3]=b[4]=1;
  16.   mysearch(0);
  17.   return 0;
  18. }
复制代码
回复 支持 1 反对 0

使用道具 举报

61

主题

147

帖子

563

积分

超级版主

Rank: 8Rank: 8

积分
563
板凳
 楼主| 发表于 2015-10-25 14:23:38 | 只看该作者
间隔排列
  1. #include<iostream>
  2. using namespace std;
  3. const int n=3;
  4. int a[2*n],s=0;
  5. bool b[n];
  6. void mysearch(int i)
  7. {
  8.     int j,k;
  9.     if (i==2*n)
  10.     {
  11.         cout<<++s<<":";
  12.         for (j=0; j<=2*n-1; j++) cout<<a[j];
  13.         cout<<endl;
  14.     }
  15.     else if (a[i]!=-1) mysearch(i+1);
  16.         else for (k=0; k<=n-1; k++)
  17.                 if (b[k] && (i+k+2<=2*n-1) && (a[i+k+2]==-1))
  18.                 {
  19.                     a[i]=a[i+k+2]=k;
  20.                     b[k]=false;
  21.                     mysearch(i+1);
  22.                     b[k]=true;
  23.                     a[i]=a[i+k+2]=-1;
  24.                 }
  25. }
  26.               int main()
  27. {
  28.     for (int i=0; i<=2*n-1; i++) a[i]=-1;
  29.     for (int i=0; i<=n-1; i++) b[i]=true;
  30.     mysearch(0);
  31.     return 0;
  32. }
复制代码
回复 支持 反对

使用道具 举报

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

本版积分规则

QQ|Archiver|手机版|小黑屋|服务支持:DZ动力|华师一附中OI组  

GMT+8, 2024-12-26 13:49 , Processed in 0.097734 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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