刷题记录C/C++版
文章平均质量分 90
随便记录一些零碎的东西...之后会持续更新刷题笔记,咕咕咕(不是
umbrellalalalala
医学图像算法,现大厂研发工程师,经历过算法转开发,欢迎交流
展开
-
编程训练——循环左移
题目描述n个数字存入数组,将其循环左移x位,输出移动结果。样例:101 2 3 4 5 6 7 8 9 1034 5 6 7 8 9 10 1 2 3 上述是十个数字,向左移动三位,输出移动结果在最后一行。算法想象一个长度位n的铅笔,在长度为x的部分折成两段,即第一段长度为x,第二段长度为n-x。循环左移的x位的作用就是相当于将铅笔的第一段接在第二段后面。具体做法就是将第一段和第二段分别掉头,再将第一段和第二段视为整体掉头,就可将铅笔的前x的长度拼接到最后。参考代码#include原创 2020-06-12 19:38:32 · 696 阅读 · 1 评论 -
C语言——基础查漏补缺(四):利用《挑战程序设计竞赛(第二版)》前两章学习经典算法
这是《挑战程序设计竞赛(第二版)》前两章的学习笔记,包含了贪心法、动态规划、DFS和BFS等,自认为是经典的基础算法补充学习资料。第一章的热身1,三角形// 三角形,输入n,输入n个数(备选边长)// 输出最大三角形边长,如果无法组成三角形就输出0// 算法:暴搜#include<stdio.h>#define maxn 105int max(int a, int b){ if(a >= b)return a; else return b;}// 判原创 2021-03-03 18:26:13 · 272 阅读 · 0 评论 -
编程训练——输出迷宫所有解(不是迷宫最短路)
题目描述之前写过一个用BFS解决迷宫最短路的问题,这篇文章则是另外一个问题,那就是输出迷宫的所有可能路径。直接看样例输入输出就明白题意了:样例输入13s..*.*..e3代表迷宫是3 ×\times× 3的,s代表起点,e代表终点,.代表路,'*'代表墙壁。样例输出1(0,1)(1,1)(2,1)(2,2)显然这个迷宫只有一条路径,上述输出了从起点的下一步开始的所有点坐标。...原创 2020-03-10 19:32:05 · 305 阅读 · 0 评论 -
编程训练——兑换钱问题(用动态规划)
题目// 输入m,表示有m种钞票;// 输入base[1]~base[m]表示每种钞票的面值。// 输入n,代表想将n元兑换成这些面值。求出兑换钞票数最少的情况下,最少钞票数和每种面值需要的张数。// 假设base[1]一定为1,即不存在找不到兑换方式的情况,因为任何面值都能兑换成若干张1元。样例输入31 3 4100m=3,表示有三种钞票,面值分别为base[1]=1、bas...原创 2020-03-05 20:59:43 · 1271 阅读 · 0 评论 -
编程训练——进制转换
题目编制函数Itob(int n, char s[], int b),将整数n转化为b进制表示形式,结果存入数组s中,b的取值范围是2,8,16,s的最大长度为100.思路就是现将整数转换为二进制数,然后将二进制数转换为8进制和16进制。没有什么难度,考研的是基础和细致度。代码#include<stdio.h>#include<string.h>#defin...原创 2020-03-01 20:26:23 · 308 阅读 · 0 评论 -
编程训练——多重集组合数
题目(图片来源:《挑战程序设计竞赛》第二版)样例输入3 31 2 310000意思是从3个(左边的3)数中选出3个(右边的3)。每个数字分别有1、2、3个,求出取法数,并输出取法数模10000的余数样例输出6算法典型的动态规划。dp[i][j]dp[i][j]dp[i][j]为从前i个数(0~i−1号0~i-1号0~i−1号)中取j个的取法数,初始化为dp[0][非0]...原创 2020-03-01 12:14:28 · 366 阅读 · 0 评论 -
编程训练——最长公共子序列(LCS)
题目最长公共子序列,给出两个字符串,求出最长公共子序列的长度比如abcd和becd,最长公共子序列是bcd,长度为3样例输入4 4abcdbecd输入为长度分别为4和4的字符串。样例输出3abcd和becd的公共部分是bcd,长度为3.算法用典型的动态规划就能求解,非常简单,不做解释,直接看dp数组:dp[i][j]dp[i][j]dp[i][j]是s1~sis_1~...原创 2020-02-29 18:37:20 · 224 阅读 · 0 评论 -
编程训练——最长上升子序列
题目最长上升子序列问题,长度为n的数列,求出其中最长上升子序列的长度。上升子序列就是单调非减的子数列。样例输入54 2 3 1 5输入序列的长度和序列。样例输出3序列中的最长子序列是2、3、5,长度为3.算法dp[i]dp[i]dp[i]表示以aia_iai为结尾的最长上升子序列LIS的长度,其有两种可能:1,只包含aia_iai的LIS;2,对于所有0≤j<...原创 2020-02-28 19:05:55 · 183 阅读 · 0 评论 -
编程训练——多重部分和问题
题目给定n个不同大小的数字aia_iai,每种数字个mim_imi个,判断是否可以从这些数字中选出若干数是的它们的和恰好为K。样例输入33 5 83 2 217这个样例输入的意思是一共有三种数字,分别是3、5、8,每个数字的个数分别是3、2、2.即从3个3、2个5、2个8中是否能找出一个组合,其和为17?样例输出Yes3个3和1个8的和就是17,所以输出Yes;反之输...原创 2020-02-28 17:45:48 · 184 阅读 · 0 评论 -
编程训练——01背包算法的两种解法
题目nnn个物品,重量和价值分别存储在数组www和数组vvv中,输入总重量WWW,求选出不超过WWW的物品最大总价值。每个物品只能选择一次。n,w,vn,w,vn,w,v,均为1~1001~1001~100, WWW为1~100001~100001~10000.样例输入42 1 3 23 2 4 25n=4n=4n=4个物品,重量www分别是2,1,3,22,1,3,22,1,...原创 2020-02-18 10:15:19 · 263 阅读 · 0 评论 -
编程训练——完全背包问题
题目描述nnn个物品,重量分别为wiw_iwi和viv_ivi,从这些物品中挑选总重量不超过WWW的物品,求出挑选物品价值综合的最大值,每种物品都可以挑选任意多件。(01背包问题是每种物品只能挑选一件)文中将以数组www存储重量,数组vvv存储价值,w[i]w[i]w[i]和v[i]v[i]v[i]分别代表第i号物品(或者叫第i+1i+1i+1个物品)的重量和价值。正整数nnn不超过10...原创 2020-02-17 13:42:17 · 273 阅读 · 0 评论 -
编程训练——有关计数的dp:划分数
题目描述:将n个无区别的物品,划分成不超过m组,求出划分方法总数,输出总数模M的余数。1≤n,m≤10001≤n,m≤10001≤n,m≤10002≤M≤100002≤M≤100002≤M≤10000样例输入:4 3 10000将4划分为不超过3项:1+1+2、2+2、1+3、41+1+2、2+2、1+3、41+1+2、2+2、1+3、4,有4种划分方法,所以输出4%10000=44...原创 2020-02-17 10:08:19 · 221 阅读 · 0 评论 -
编程训练——从部分和问题(DFS)重视递归边界的正确设置
部分和问题是经典的DFS问题,题目描述见样例输入输出。【样例输入输出】多组输入输出Input41 2 3 4941 2 3 4841 2 3 411OutputYesYesNo输入41 2 3 49后输出Yes代表,能从1,2,3,4这4个数中找到一个组合,这个组合之和为9.【代码】(思路和出错部分见注释)#include&lt;stdio.h...原创 2019-02-27 13:14:44 · 510 阅读 · 1 评论 -
Codeforces——961C. Chessboard
本文是博主原创文章,未经允许不得转载。我在博客园也同步发布了此文,链接http://www.cnblogs.com/umbrellalalalala/p/8824234.html题目来源http://codeforces.com/problemset/problem/961/C【题目】(看不懂可以往下翻,有翻译)Magnus decided to play a class...原创 2018-04-11 10:18:58 · 565 阅读 · 0 评论 -
Codeforces——961B. Lecture Sleep
本文是博主原创文章,未经允许不得转载。我在博客园也同步发布了此文,链接 http://www.cnblogs.com/umbrellalalalala/p/8824209.html题目来源 http://codeforces.com/problemset/problem/961/B【题目】Your friend Mishka and you attend a calcu...原创 2018-04-11 10:04:45 · 295 阅读 · 0 评论 -
Codeforces——961A Tetris
本文是博主原创文章,未经允许不得转载。我在博客园也同步发布了此文,链接 http://www.cnblogs.com/umbrellalalalala/p/8824188.html 题目链接 http://codeforces.com/problemset/problem/961/A【题目】You are given a following process.There...原创 2018-04-11 09:48:10 · 572 阅读 · 0 评论 -
编程训练——从数水洼[DFS,POJ No.2386]察觉二维数组做函数参数和漏写getchar()两个问题
【题目描述和样例】4 4.ww.....w..w.ww.25 5w.w.w.w.w......w..ww...w.30 0Program ended with exit code: 0输入空地的大小,然后输入空地的状态,w代表有水,.代表没水。然后输出水洼个数(斜线相邻算一个水洼),多组输入输出,空地大小为0×00\times00×0时退出。【错误分析和示例代码...原创 2019-02-27 14:22:19 · 802 阅读 · 0 评论 -
编程训练——八皇后升级版:N皇后问题
什么是八皇后问题:略。【运行情况概览】输入一个正数n,输出对应n皇后问题的解:1(1)1皇后问题有1组解,以上呈现各行皇后分别放在第几列22皇后问题无解33皇后问题无解4(2 4 1 3)(3 1 4 2)4皇后问题有2组解,以上呈现各行皇后分别放在第几列5(1 3 5 2 4)(1 4 2 5 3)(2 4 1 3 5)(2 5 3 1 4)(3 1 4 2...原创 2019-02-27 16:19:47 · 732 阅读 · 0 评论 -
编程训练——避免不该有的罚时?试试背诵几个常见的动态规划程序
昨天晚上回顾了以前在onenote上记的动态规划笔记,发现很多程序都有相似之处,且最近两天写的动态规划程序都没有一遍AC。所以将这两天写的动态规划程序总结至此,以便背诵、默写用(这种题被罚时实在太亏)。背诵的时候要特别注意dp数组的功能和其递推公式。一、hdu1284 钱币兑换问题先来道最简单的背诵。【题目描述】一个国家只有1,2,3分钱,输入非负整数n(不超过10000),输出兑换金额...原创 2019-02-28 21:30:01 · 760 阅读 · 0 评论 -
编程训练——质数筛法
实现一个程序,输入n,输出1~n的非质数,n最大为100。【样例】Input20Output 1 2 3 5 7 11 13 17 19 【代码】(所用算法和常见错误讲解在注释里)// 算法描述:任何数都可以写成若干质数的乘积,比如18=2*3*3,16=2^4,现将一个数分解成若干质数的积,...原创 2019-02-26 15:22:57 · 625 阅读 · 0 评论 -
编程训练——二分查找报错Thread 1: EXC_BAD_ACCESS (code=2, address=0x7ffeef3ffff8)的案例和正确代码
【输入输出样例】样例一Input101 2 3 4 5 6 7 8 9 105Output4说明:输入5,输出5在数组中的下标4样例二Input102 4 7 10 19 22 23 38 56 10020Output-1Then Input23Output6输入20,没找到,返回-1;输入23,返回其下标6。【代码实现】(错误代码和错因分析...原创 2019-02-26 16:11:07 · 10572 阅读 · 0 评论 -
编程训练——从迷宫最短路径了解BFS(不用STL的代码)
迷宫最短路径涉及BFS和队列的使用,本文不用STL实现这道题。【题目描述】图片来源于《挑战程序设计竞赛(第2版)》:【算法分析】首先将起点存入队列;每次先从队列中取出一个点,然后遍历其上下左右四个方向上的非墙壁点(当然同时也要判断四个方向都在正确范围内)。对于每一个被遍历的点,先判断其是不是终点,如果不是,则将此点加入队列,然后处理下一个遍历到的点。对于每个被遍历的点,同时还要存储从开...原创 2019-03-02 21:12:42 · 3258 阅读 · 3 评论 -
编程训练——字符串比较程序升级版(随便加个需求累死人系列)
正常的字符串比较程序是这样的:在程序中直接定义字符串a和b,运行程序仅输出比较结果。今天我做这道题时想加点难度:让用户自己输入a,按回车,然后输入b,按回车,显示比较结果。然后输入下一组a和b进行比较……直到getchar()为EOF,就像这样:看上去很简单,但我尝试了三种写法,才正确实现这种输入数据的方式。下面看代码,错误的写法被注释掉了:#include&amp;amp;amp;amp;amp;amp;lt;stdio.h&amp;amp;amp;amp;amp;原创 2019-02-26 19:41:59 · 333 阅读 · 0 评论 -
编程训练——简单分治法代码背诵
求数组最大数【问题描述】输入数组长度n,一次输入n个数,然后输出这n个数的最大值。解决方法非常简单,将数组一分为二分别找最大值,如果数组不可分(数组长度为1),那么就到达递归边界。【示例代码】#include<stdio.h>#define MAX_N 100int MaxNum(int *a,int start_index,int end_index){ i...原创 2019-03-03 14:31:36 · 360 阅读 · 0 评论 -
编程训练——最经典的递归题:汉诺塔
汉诺塔的代码当然是要背诵的。【题目描述】输入n,代表有n个圆盘。共有a,b,c三个杆子,输出结果表示如何移动圆盘,完成汉诺塔的求解。【示例代码】算法描述见注释。令人费解的事情:9~11行和13~15行长得一样对吧?但是9~11行会报错Expected expression。至今我未发现有什么不同,也许是xcode的bug?//// 算法描述:先将1~n-1号从a移动到b,然后将n号...原创 2019-03-03 15:59:52 · 352 阅读 · 0 评论 -
日常练手——利用递归输出1-n的所有排列
本文是博主原创文章,未经允许不得转载。我的博客园也同步发布了此文,链接www.cnblogs.com/umbrellalalalala/p/8824112.html题目:题目输入整数n,按照字典序从小到大的顺序输出前n个数的所有排列。样例:Input2Output1221注意n的最大值是20分析:此题是典型的枚举排列,只需要用递归...原创 2018-04-02 17:51:57 · 2287 阅读 · 4 评论