穷举

本文通过一个具体的程序实例展示了如何使用穷举法解决特定的组合问题,即小明向三位小朋友分配五本书的不同方案。文章重点介绍了使用C++实现的多重循环结构,并通过条件判断确保每种方案的独特性。
  1. #include <iostream>   
  2. using namespace std;  
  3. int main()  
  4. {  
  5.     int a,b,c,count=0;  
  6.     cout<<"小明借书给三位小朋友书的方案有:"<<endl;  
  7.     for(a=1;a<=5;a++)            //穷举a借5本书中的1本的全部情况  
  8.         for(b=1;b<=5;b++)        //穷举b借5本书中的一本的全部情况  
  9.             for(c=1;c<=5;c++)    //穷举c借5本书中的1本的全部情况  
  10.                 if(a!=b&&c!=a&&c!=b) //判断三个人借的书是否不同,(a-b)*(b-c)*(c-a)!=0更好  
  11.                 {  
  12.                     ++count;  
  13.                     cout<<count<<": "<<a<<", "<<b<<", "<<c<<endl;//输出方案  
  14.                 }  
  15.     return 0;  
  16. }  

代码来自贺老师

 

将输出序号,每次排列的书号的输出 加入for 循环体内    输出每个方案的具体内容。

 

对于几个不同题目,基本套路是  穷举类型,嵌套循环内部加限制条件来挑出符合题意的选项并输出。

    可以做优化的地方是尽量来减少无意义的穷举,比如在“奥赛题“中,出现相同的数字就不符合题意,当前两次嵌套循环出现出现相同的时候,就可以continue了,第三次嵌套再判断一次,第四次再判断一次,很有效的减少了无意义的答案的列举。

ps:小九九那道题对于for后面的{}  再不同地方括会产生不同的结果。。。。开始纠结了好久为什么输出的形式不正确,后来想了一会注意到了这个问题

关于for循环

上次做了一个时间复杂度的测试。

在四重循环的模式下,n<30时,时间控制在1s内,n<120,时间控制在15s内,n=130时,s=34s。

                 在数据越大的时候,粗暴的嵌套造成的时间上的复杂的成爆发增长。

              所以算法很重要记得做优化不要写垃圾代码啊啊啊啊啊。。。。。。。。。。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值