C++
打开秋天的内核
自学者
展开
-
假币之谜
假币之谜有八个硬币a,b,c,d,e,f,g,h,其中一枚是假币,从外观无法分辨,比真币或轻或重。使用天平,用最少比较次数,找出假币,并分辨出轻重。#include <iostream>using namespace std;int weight(float x, float y) { if (x == y)return 0; else if (x > y)return 1; else return 2;}int main(){ float a原创 2021-01-13 23:16:59 · 201 阅读 · 0 评论 -
递归运用——钱币系统问题
递归运用——钱币系统问题问题:(钱币系统问题) 某钱币系统由 k (k≤20) 种硬币组成,币值依次为 a[1]、 a[2]、……、a[k], 其中 a[i] (i=1,2,……,k) 为互不相同的正整数,且依降序排列, a[1]≤200。给定某整数币值 n(n≤3000), 要求用最少枚数的硬币表示这个币值。输入格式为:第一行:k (硬币种数)第二行:a[1]、 a[2]、 … a[k] (各币值用空格隔开,已按降序排列好)第三行:n (给定的币值)直接在屏幕上输出结果。如果该钱币系统无法表示币原创 2021-01-10 15:48:12 · 308 阅读 · 0 评论 -
2021-01-03
问题既复杂又简单问题:编写一个在1,2,…,n(顺序不能变,n<=9)数字之间插入+或-或*或/或什么都不插入,使得计算结果为0的程序,并输出所有的可能性。#include<iostream>#include<deque>#include<vector>#include <math.h> #include<string>using namespace std;int n;//以'0'、'1'、'2'、替代' '、'+'、'原创 2021-01-03 23:21:30 · 179 阅读 · 0 评论 -
C++——do while应用
C++——do while应用移动问题:有一行数据,左边有n个1,右边有n个2,1和2相邻可以交换,至无连续的1相邻和无连续的2相邻为止。显示移动过程。这个问题一开始认为用递归应该没有问题,程序如下:#include <iostream>#include<deque>#include<time.h>using namespace std;void dfs(string s);deque <string> result;string sourc原创 2021-01-02 14:49:37 · 210 阅读 · 0 评论 -
继续修炼——从一种状态到另一种状态的最短路径(之goto语句)
继续修炼——从一种状态到另一种状态的最短路径(之goto语句)参考:继续修炼——从一种状态到另一种状态的最短路径还是把题目再说一遍,不然续得太多,都不知道题目是什么了。问题:在一行数据中,有3个1,3个2,1个0,0(空格)在中间,1和2分居左右,每个数据占据一格,如下:1, 1, 1, 0, 2, 2, 2通过移动把上述排列变成:2, 2, 2, 0, 1, 1, 1移动规则:1、1只能向右移动,2只能向左移动。2、在下列两种条件下可以移动:一是移动一格,恰好进入到空格子中,二是跳过原创 2021-01-01 22:38:28 · 198 阅读 · 0 评论 -
继续修炼——从一种状态到另一种状态的最短路径
继续修炼——从一种状态到另一种状态的最短路径(续三)参考继续修炼——从一种状态到另一种状态的最短路径(再续)用C++再写一遍:#include <iostream>#include<deque>#include<time.h>using namespace std;void dfs(string s);deque <string> result;string source, target;time_t start_time;int n;原创 2021-01-01 12:26:18 · 224 阅读 · 0 评论 -
经典再现(续)
经典再现(续)参考经典再现前面那个程序还是有改进的余地。最后那一段关于显示的代码可以省略。原因是在分离数字和运算符的同时可以进行累加计算。增加一个符号变量symbol,预设为1。对于第一数,无条件进行累加,之后如果遇到加号,就设置成1,如果遇到减号,就设置为-1,每次累加前先乘以符号变量。程序代码精简了不少。这次把计算结果为0的算式打印出来。#include<iostream>#include<deque>#include <math.h> #includ原创 2020-12-19 22:30:46 · 166 阅读 · 1 评论 -
2020-12-18
经典再现程序的魅力在于它的无限可能性和条条大路通罗马的各种算法。看这道经典题:编写一个在1,2,…,n(顺序不能变,n<=9)数字之间插入+或-或什么都不插入,使得计算结果为0的程序,并输出所有的可能性。参考关于一个优秀程序员半小时必须解决的5个问题(之一)如果指定n,可以多重循环进行暴力破解。但如果n需要键盘输入,就不是那么好操作。通常的做法是采用递归替代多重循环。这里采用编码的方式进行破解,还是相当有趣的,网友不妨看看。编程思路:1、假设’0’、‘1’、‘2’、对应’ ‘、’+’、’-原创 2020-12-18 21:28:59 · 241 阅读 · 2 评论 -
2020-12-13
在C++和Python之间切换(续)参考在C++和Python之间切换既然用Python能够写成,用C++肯定也成,而且速度应该更快才对。但出乎意料的是,几乎比照Python写的程序,费了九牛二虎之力,总是能够运行,但速度竟然比不上Python,不知道出了什么问题。各位帮我看看。#include<iostream>#include<set>#include<deque>#include<vector>#include<time.h>原创 2020-12-13 20:52:32 · 108 阅读 · 0 评论 -
2020-12-05
goto语句是一把双刃剑在很多文章里,都说最好不要用goto语句,但既然C++有,就一定有它的用武之地。八数码问题的最终解决,可能还是要用双向宽搜,办法虽然笨,但获得最短路径肯定是妥妥的。网上一些八数码程序都只报了搜索层次,但具体路径没有。原因是节省内存开销,极大提高运算速度,但没有过程总是遗憾,自己补上。测试了一下,不算完美(后续再改进),但比起python,速度还是要快很多。不啰嗦,直接上代码。#include<iostream>#include <string.h>原创 2020-12-05 21:43:07 · 129 阅读 · 0 评论 -
2020-12-04
C++的第一个类——数据结构带来的美试尝着用C++写了一些程序,但类的结构和使用一直是困惑我的。当设置一个set容器,往里面添加类对象时,问题来了,除了第一数据,其它是存不进的。在网上学习后,发现要重载小于(<)运算符,找了一些例子,终于试验成功,在八数码编程中试验了一把,还是很给力的,看看吧。#include<iostream>#include<set>#include<deque>#include<time.h>using namespa原创 2020-12-04 20:04:53 · 99 阅读 · 0 评论 -
2020-11-28
不介意用C++再写一遍(二)参考不介意用C++再写一遍(一)在验证从一种状态变化到另一种状态最多须要多少搜索多少层的时候,初步得到的结论是不超过30层,但验证起来很复杂,时间很长。因此须要一个运算比较快的程序。从网上找了许多程序,发现有一个程序解答速度很快,就把这个程序修改了,特此感谢AcceptedLee,链接如下:AcceptedLee的博客主要思路:计算012345678所有组合对目标状态(target)的搜索层次(剔除无解状态),找出那些搜索层次达到或超过30的状态(source),搜索方法原创 2020-11-28 18:41:50 · 162 阅读 · 0 评论 -
2020-11-27
不介意用C++再写一遍(一)八数码问题研究有一段时间了,但总感觉速度太慢,验证起来不爽,所以把多年前学的C++再温习了一遍。先写一个简单的(单向宽搜)看看成效。#include<iostream>#include<set>#include<time.h>using namespace std;set<string> sun;set<string> sum;set<string> summ;//'0'从某个位置移到到另外原创 2020-11-27 21:48:10 · 137 阅读 · 0 评论