小白学C++请问求n!这段数控n代码表示什么问题在哪里

第一段代码的执行结果:

第二段代码的执行结果:

第三段代码的执行结果:

第四段代码的执行结果:

为什么第一段代码和第二段代码当中,不管是写%d还是写%s执行结果都是一样的,而在第三段代码和第四段代码中,写%d还是写%s执行结果不一样? 问题出在哪里,为什么第三段代码是错误的?(PS:我的python版本是3.5.1。 用的编辑器是Geany)

  最近在上C++课的时候老师留了一道课后作业,求n个数字的全部子集,比如说输入6就打印{1, 2, 3, 4,5, 6}的全部子集。

  当时我脑中第一反应就是用递归枚举随便打一打啊,不过后来有位同学问我思路,突然不知所措,因为我们当时才讲了基本数据类型和while、if、for这几种控制选择结构,数组函数神马的都还没有讲,那么,用这些最基本的知识要怎么做呢?

  虽然道理上讲是所有的算法问题都能用控制结构的堆叠嵌套来解决,不过落实到代码上真的有点无力。

  我也尝试去网上找答案,不过不管换了多少关键字搜索,基本上都是那么几种求法,增量构造啦、二进制啦、位向量啦。。。看着一个比一个高级,可搜了好久也没有找到最最最最最原始的方法,后来我想了一段时间并汲取了网上的一些思想,写了一个简单的暴力枚举算法


  n个元素的集合的子集数就是2的n次幂嘛(貌似是初中讲的,不清楚的翻笔记去啦),所以外层循环就是循环2的n次幂次。

   内部实现的话就是先用temp储存一下i的值,然后用for循环确定集合中的每个元素是否应该被打印出来,那么如何确定呢?即判断temp的奇偶,而且每次内部for循环都改变temp的值。


  可以加一些花括号逗号之类的易于区分自己中的每个元素(不过我的代码好像有点问题,晚上再改吧,毕竟基电作业还没写QAQ)

  新的代码可以判断输入的元素是否有重复,如果重复的话就把多余的元素删除后再求其子集;同时,新的方法可以输入任意类型的字符串(本来就是用字符串来接收的啊)。

// 判断输入的元素是否重复 //外层循环循环2的n次幂次 //清除数组的内存空间

  这次思考还是比较有意义的,以后学习算法的时候尽量先去用最原始的方式实现,然后计算时间复杂度、空间复杂度,再去用所谓高级一些的技巧优化,更为完善的代码晚上再整理贴出来吧。

内容来源于网络如有侵权请私信删除

我要回帖

更多关于 n京沪代码 的文章

 

随机推荐