![](https://img-blog.csdnimg.cn/20201014180756930.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
C
程序设计基础
夜阑優珲
我是真的懒。
展开
-
freopen的使用
使用freopen一定要注意要将读取或写入的文件和程序的exe文件放到同一目录下。原创 2021-05-26 20:50:09 · 213 阅读 · 0 评论 -
题目:求集合的所有子集
题目问题 A: 求集合的所有子集(数组)时间限制: 1 Sec 内存限制: 128 MB提交: 390 解决: 96[提交][状态][讨论版]题目描述一个元素个数为n(n>0)的集合,有2n个子集(包括空集)。例如,集合A={a,b,c}的子集有23=8个,分别为:{}(空集)、{a}、{b}、{a、b}、{c}、{a,c},{b,c},{a,b,c}。输入一集合(假设集合元素为字符),给出该集合的所有子集。子集的输出顺序根据样例输出分析得出。输入测试次数t每组测试数据格原创 2021-01-07 22:45:34 · 794 阅读 · 0 评论 -
题目:数独验证
题目问题 F: 数独验证(二维数组,函数)时间限制: 1 Sec 内存限制: 128 MB提交: 101 解决: 57[提交][状态][讨论版]题目描述数独是一种填数游戏,玩家需要根据9×9盘面上的已知数字,推理出所有剩余空格的数字,并满足每一行、每一列、每一个粗线宫(3*3)内的数字均含1-9,不重复。每个数独有唯一解。下图是一个数独填数后的解(黑色数字是已知数字,绿色数字是填数数字)。输入填数后的9×9盘面,写函数判断其是否是解,返回1或0。输入测试次数每组测试数据是原创 2021-01-06 23:13:38 · 1234 阅读 · 0 评论 -
题目:整数转字符串
题目问题 E: 整数转字符串(递归)时间限制: 1 Sec 内存限制: 128 MB提交: 1000 解决: 605[提交][状态][讨论版]题目描述写递归函数void itostr(int num,char str[]),函数功能是将一个整数num转换为字符串str,如整数135,转换为字符串“135”。主函数如下,不可修改。itostr每次独立调用。不可以为实现itostr的递归定义全局变量。输入测试次数tt个整数输出每个整数,输出转换后的数字字符串样例输入5原创 2021-01-06 22:40:46 · 447 阅读 · 0 评论 -
题目:LELE的RPG难题
题解这题一开始while头那里忘加!=EOF了,搞的一直TLE(因为一直不会停),如果是cin才是不要加的,scanf要加。这题的递推的子结构是:除了1,2,3的值是3,6,6以外,其他的都符合a[i] = a[i-1]+2*a[i-2](如果第i-1个方格和第一个方格颜色相同,则第i个方格有两种颜色可以涂,而第1格和第i-1格颜色相同的数量就等于a[i-2],所以这种情况对应2*a[i-2];如果第i-1个方格和第一个方格颜色不同,则第i个方格只能涂一种颜色,而第1格和第i格颜色相同的数量等于a[i原创 2021-01-05 23:02:19 · 699 阅读 · 0 评论 -
题目:盗梦空间
题解代码2的思路是num从初值60开始,如果IN就除20,如果OUT就乘20。代码1的优化是num从1开始,如果IN就除20,如果OUT就除20。在进行精确运算的时候,要避免使用浮点数。浮点数由于计算机位数有限,所以对于一些无限小数来说都只是近似值,与实际值存在误差。这里将原本的乘浮点数转化成了除整型数,从而避免了浮点数参与计算。代码1中num的初值讲道理应该对应1/60,这里也将60提出来,num初值就是整型1了,60在num参与运算的时候再除上去。题目问题 F: 盗梦空间时间限制: 1原创 2021-01-06 20:19:29 · 694 阅读 · 0 评论 -
题目:人口数量排行
题解这题遇到了一个问题:如果用浮点型来保存人口,则在用printf("%f")来输出时小数部分会输出无效0凑满6位,即使加上格式控制输出的小数位数也是固定的,不能保持每组都和输入的小数位数一样。(cout输出或%g格式输出都可能会吞掉几位小数)解决办法:用字符串来保存人口,当需要将其作为整型使用时,可以用stdlib.h下的atoi函数,作用就是将整数意义的字符串化为整型数据。题目问题 D: 人口数量排行(数组,结构体)时间限制: 1 Sec 内存限制: 128 MB提交: 104 解决原创 2021-01-05 21:15:56 · 208 阅读 · 0 评论 -
题目:矩阵运算
题目问题 Q: 矩阵运算时间限制: 1 Sec 内存限制: 128 MB提交: 1187 解决: 715[提交][状态][讨论版]题目描述两个m×n矩阵A和B的加,标记为A+B,一样是个m×n矩阵,其内的各元素为A、B相对应元素相加后的值。设A为 的矩阵,B为 的矩阵,那么称 的矩阵C为矩阵A与B的乘积,记作 ,其中矩阵C中的第 行第 列元素可以表示为A的第i行与B的第j列对应元素乘积和.输入测试次数t每组测试数据格式如下:矩阵阶数n(0<n<1原创 2021-01-05 19:29:42 · 840 阅读 · 0 评论 -
题目:6174问题
题目问题 F: 6174问题时间限制: 1 Sec 内存限制: 128 MB提交: 444 解决: 244[提交][状态][讨论版]题目描述假设你有一个各位数字互不相同的四位数,把所有的数字从大到小排序后得到a,从小到大后得到b,然后用a-b替换原来这个数,并且继续操作。例如,从1234出发,依次可以得到4321-1234=3087、8730-378=8352、8532-2358=6174,又回到了它自己!现在要你写一个程序来判断一个四位数经过多少次这样的操作能出现循环,并且求出操作的次数原创 2021-01-05 16:48:55 · 500 阅读 · 0 评论 -
题目:万圣节派对
题目问题 D: 万圣节派对(函数)时间限制: 1 Sec 内存限制: 128 MB提交: 348 解决: 89[提交][状态][讨论版]题目描述万圣节有一个Party,XadillaX显然也要去凑热闹了。因为去凑热闹的人数非常庞大,几十W的数量级吧,自然要进场就需要有门票了。很幸运的,XadillaX竟然拿到了一张真·门票!这真·门票的排列规则有些奇怪:门票号是由0~6组成的六位数(0~6这几个数字可重用)每一个门票号的每一位不能有三个连续相同的数字(如123335是不行的)每一原创 2021-01-05 15:53:05 · 569 阅读 · 0 评论 -
题目:矩阵取数问题
题解代码2中每层递归函数包含三次递归,时间复杂度直接起飞。(一般每层递归函数中只应有一次递归,不然容易TLE)代码2用的是逆向动态规划,代码1则是正向动态规划,其中动态规划的最优子结构是“(x,y)的最大价值为max{f(x-1, y) , f(x, y-1)}”。代码1优化的地方就在于将每求完一个点的最大价值后就将其存了起来,所以在求后面点的最大价值时可以方便获取,而代码2每次要获取之前点的最大价值都要递归回去求。这题动态规划的子结构是由前得后,所以适合正向求解,可惜一开始被题目的提示给带偏。。。原创 2021-01-04 22:04:10 · 320 阅读 · 0 评论 -
题目:N皇后问题
题解根据皇后不能同行同列的性质可以知道,要在N*N棋盘上摆N个皇后则每行最多一个皇后,所以在暴力解的时候不需要每个皇后都遍历N *N种可能,只需要对该皇后对应行的N种可能遍历就行了(这里一层递归就代表一行,也就是一个皇后,以递归形参i来控制)。直接用一个二维flag数组来标志棋盘上哪些格子可以放皇后,而每当在(i,j)放入一个皇后就要将其同排同列和上下斜线的格子flag置1,分别对应k = = i || r = = j || (k+r) = = (i+j) || (k-r) = =(i-j)。题目原创 2021-01-05 16:51:29 · 200 阅读 · 0 评论 -
题目:上车人数
题解这里上车人数是递归的,车上人数也是递归的,可以分别设立两个递归函数,功能就是得到每站的上车人数和车上人数,这样解题会方便许多。题中第二站的上车人数x没有告诉,而是间接告诉其他站的车上人数,数学思维的话就是逆向解出x,但代码中不允许变量,所以应该是让x自增1一个一个去试,如果相应站的人数等于m就是题中的情况了。题目问题 C: 上车人数(递归)时间限制: 1 Sec 内存限制: 128 MB提交: 774 解决: 581[提交][状态][讨论版]题目描述 公共汽车从始发站(称为第1原创 2021-01-05 16:51:51 · 887 阅读 · 0 评论 -
题目:long long long 之加法运算
题解本题中要求用字符串模拟大数的加法。直接将较短的串加到较长的串上,然后输出长串后就是相加的结果。在模拟加法时会遇到进位的操作,当两串中的字符相加大于10就会进1,此时如果长串中的下一位是9的话则又要进一,所以可以用一个while解决进位的操作,判断表达式就是下一位是否是9。题目问题 E: long long long 之加法运算时间限制: 1 Sec 内存限制: 32 MB提交: 1980 解决: 542[提交][状态][讨论版]题目描述张老师班的小刘编程时想用long lon原创 2020-12-28 19:57:26 · 2632 阅读 · 0 评论 -
题目:部分和问题
题解这题是关于递归的经典例题,题解全部位于代码注释中。题目问题 F: 部分和问题(数组,函数)时间限制: 1 Sec 内存限制: 128 MB提交: 683 解决: 293[提交][状态][讨论版]题目描述给定整数a1、a2、.......an,判断是否可以从中选出若干数,使它们的和恰好为k。输入有多组测试数据。每组测试数据两行:第一行:正整数n、整数k,n表示数的个数,k表示数的和。第二行:n个数输出每组测试数据,如果和恰好可以为k,输出“YES”,并按输入顺序原创 2021-01-05 16:52:52 · 326 阅读 · 0 评论 -
题目:分类排序
题解:题目中输入的a有可能为负数,这时就不能用"a%2 == 0"和"a%2 == 1"来判断奇偶性了,负奇数对2取余的值为-1,但有偶数对2取余恒为0,所以可以用"a%2 == 0"和"!(a%2 == 0)来判断奇偶,取余的值不是0的就是奇数题目:问题 D: 分类排序时间限制: 1 Sec 内存限制: 128 MB提交: 838 解决: 239[提交][状态][讨论版]题目描述从键盘输入10个整数(10个整数均不相同), 然后再从键盘中输入一个整数a,如果该整数a为奇数, 且与这原创 2020-12-03 22:10:46 · 336 阅读 · 1 评论 -
题目:数组排序
1.冒泡排序题解:冒泡排序注意外层循环只要循环n-1次,因为剩下的一个肯定是按照顺序的;并且其内层循环也要注意少循环一次,因为每次是当前值和下一个值进行比较,如果以最后一个为当前值数组就会越界。题目:问题 B: 冒泡排序(数组)时间限制: 1 Sec 内存限制: 128 MB提交: 1245 解决: 684[提交][状态][讨论版]题目描述输入n个数字,使用冒泡排序对其进行升序排序。输入测试次数T每组测试数据格式为:数字个数n,后跟n个数字。假设n<20。输出原创 2020-12-03 19:17:07 · 864 阅读 · 0 评论 -
题目:约瑟夫环
题解:这里的约瑟夫环是通过对数组长度的循环位移实现的,注意每次操作后数组长度减一。题中的约瑟夫环每次位移是移三位,但要注意每次位移前都要删除当前元素,所以实际上每次只要移两位就行了。题目:问题 C: 约瑟夫环时间限制: 1 Sec 内存限制: 128 MB提交: 1109 解决: 624[提交][状态][讨论版]题目描述有n个人围成一个圈,从第一个人开始顺序报号1,2,3。凡是报到3退出圈子中的人原来的序号。要求打印出退出人的序号。以及找出最后留在圈子中的人原来的序号。输入原创 2020-12-03 19:01:03 · 201 阅读 · 0 评论 -
题目:数组奇偶排序(数组)
题解:所用的奇偶排序算法为一开始给数组设置一个指向开头和一个指向数组末端的值,然后如果所指向的数组元素符合要求就不作操作,并且指针向中间靠,如果两指针指向元素都不符合奇偶排序的要求就将两元素对换,这样循环直到头指针大于等于尾指针,该算法时间复杂度为O(n)。题目:问题 B: 数组奇偶排序(数组)时间限制: 1 Sec 内存限制: 128 MB提交: 1511 解决: 766[提交][状态][讨论版]题目描述输入n,输入n个整数。调整数字位置使得偶数在序列的前半部分,奇数在序列的后半部原创 2020-12-03 16:23:19 · 1854 阅读 · 0 评论 -
题目:序列求和
题目:问题 L: 序列求和时间限制: 1 Sec 内存限制: 128 MB提交: 989 解决: 702[提交][状态][讨论版]题目描述有一分数序列: 2/1 3/2 5/3 8/5 13/8 21/13...... 求出这个数列的前N项之和,保留两位小数。输入N输出数列前N项和样例输入10样例输出16.48代码块:#include <stdio.h>int main(void){ double a = 1; double b原创 2020-11-13 23:47:45 · 153 阅读 · 0 评论 -
题目:AK: 2^x mod n = 1
题目:问题 AK: 2^x mod n = 1时间限制: 1 Sec 内存限制: 32 MB提交: 12 解决: 10[状态] [提交]题目描述给你一个正整数n,要求你找到最小的x(x>0)满足2^x mod n = 1。输入输入包含多组测试数据。每行一个正整数,代表n的值。输出如果最小的x存在,则输出2^x mod n = 1(注意x和n要用具体的值代替),否则输出2^? mod n = 1。样例输入25样例输出2^? mod 2 = 12^4 mod 5 = 1原创 2020-11-20 15:33:00 · 114 阅读 · 0 评论 -
题目:奇怪的减法(待验证)
题目:问题 D: [思维] 奇怪的减法时间限制: 1 Sec 内存限制: 128 MB提交: 327 解决: 42[提交][状态][讨论版]题目描述你有两个变量a和b。 考虑使用这些变量执行的以下一系列操作:1. 如果a = 0或b = 0,则结束该过程。 否则,转到步骤2;2. 如果a≥2·b,则将a的值设置为 a - 2·b,并重复步骤1.否则,转到步骤3;3. 如果b≥2·a,则将b的值设置为b - 2·a,并重复步骤1.否则,结束该过程。最初,a和b的值是正整数,因此该过程将原创 2020-11-20 16:29:55 · 309 阅读 · 2 评论 -
题目:16进制的简单运算(循环)
题目:问题 E: 16进制的简单运算(循环)时间限制: 1 Sec 内存限制: 128 MB提交: 579 解决: 354[提交][状态][讨论版]题目描述现在给你一个16进制的加减法的表达式,要求用8进制输出表达式的结果。输入第一行输入一个正整数T(0<T<100000)接下来有T行,每行输入两个数和一个加号或者一个减号,且表达式合法并且所有运算的数都小于31位输出每个表达式输出占一行,输出表达式8进制的结果。样例输入329+482318be+6784原创 2020-11-05 23:53:07 · 1944 阅读 · 0 评论 -
字符输入函数详解(getchar的使用)
getchar()函数的头文件是stdio.h,会回显。当输入流中有字符时,getchar()就直接从流中取走一个字符。当输入流中没有字符时,getchar()就会等待用户输入字符到缓冲区,直到输入回车结束(回车字符也会放入缓冲区),然后getchar()再从流中取走一个字符。通常在每次执行完scanf()函数后流中会剩下一个回车字符,所以如果要在scanf后用getchar()输入字符,就应该先getchar();取走该回车。用getchar()输入字符还是用scanf格式化输入字符取决于输入字符.原创 2020-12-16 17:51:18 · 7650 阅读 · 0 评论 -
char型和int型的转换
某个字符和它由ascii码表所对应的整型值是等价的。即如果用整型值48赋值给某个字符,则其输出后会是0;如果用字符常量’0’赋值给某个整型变量,则其输出后为48。char型实际上就是0到127的整型数经过ascii码表映射的结果,其与int型的转换需要代入映射后得到对应值。...原创 2020-12-15 23:17:42 · 857 阅读 · 0 评论 -
字符串详解
字符串是包含于字符数组的,字符串要求最后一个字符必须是’\0’。由一对双引号" "所包含起来的字符集合一定是字符串,因为系统会自动在其后面添加字符串终止符’\0’,因此双引号括起来的字符集合也叫做字符串常量。而对于由一对单引号’ ‘包含的字符,系统就不会在其后面加字符’\0’。对于char a[ ]而言,a最初只是一个字符数组变量。但如果用字符串常量对其初始化,由上面的2可知其最后一个字符为’\0’,则a就可以称为字符串变量了。而如果用最后一个字符为’\0’的字符集合对其初始化,则其最后一个字符也为’.原创 2020-12-10 19:33:30 · 859 阅读 · 0 评论 -
定义结构体变量和结构体指针变量的区别
由于经常要在函数中对结构体对象进行操作,所以函数形参中常常都是传值一个结构体指针变量,自己有时为了偷懒,干脆在定义对象时直接定义结构体指针变量,这样实参就不用取地址了。这样想是没有错,但是结构体指针变量的本质还是一个指针,只要是指针,使用它前就必须要对其初始化,否则它指向的内存一定是垃圾数据,而对其初始化只能是用其他结构体对象取地址或者是malloc申请堆空间,甚至不能用NULL为其初始化(指针会访问不到成员)。上述问题实际上就是c++中“两种创建对象方式的区别(类名创建和new创建)”的问题,二者是.原创 2020-11-22 23:21:03 · 6075 阅读 · 0 评论 -
指针越界汇总
内存分配不成功,却使用了它内存分配成功,但是没初始化就使用它内存分配成功且初始化,但是操作越过内存的边界分配了内存但是忘记释放内存,造成内存泄漏释放了内存但继续使用它...原创 2020-11-30 18:27:56 · 391 阅读 · 0 评论 -
while和for的区别
一般循环都有一个控制变量n,在for中表现为i<n,在while中表现为n–。因此while循环中循环控制变量n的值会改变,n用1次就没了,而for里面n的值不改变,可以用n继续控制循环。而且for里面还有循环变量i,给其设定初始值后就可以用在循环中计数,while则没有这个功能。...原创 2020-11-17 11:02:08 · 1934 阅读 · 0 评论 -
int数据超出范围的值变化
int型数据类型的字节长度为4字节,除去一位用作符号位还有31位用来存值,其数值范围为-2147483648到2147483647(10位数)。当int型数据正向超限时,它会从最小值重新开始;负向超限会从最大值重新开始。(在原码中:符号为为0情况下数值位全0代表0,符号位为1情况下全0也代表0,二者的补码都是00000000,虽然对负数而言原码到反码的取反对符号位无效但是反码到补码的加1对符号位有效。在补码中:00000000对应的原码为正负0,10000000代表的值是-128,但是没有8位原码..原创 2020-11-13 23:41:46 · 2640 阅读 · 0 评论 -
通过输入控制循环
以输入回车或空格结束循环while(getchar()!=’\n’ && getchar()!=’\n’)以停止输入结束循环while(getchar()!=EOF)原创 2020-11-11 10:12:02 · 1380 阅读 · 0 评论 -
输入函数详解(未完成)
List item原创 2020-11-19 17:30:55 · 152 阅读 · 0 评论 -
循环意义的加减
( x + n )%N代表的是由数0到数n-1间的循环加n,其中N代表的是循环区间[ 0 , n-1 ]里数的总数。( x - n + N )%N代表的是由数0到数n-1间的循环减n,这里括号内加N只是为防止括号里的x-n变成负数,因为负数的求余法则不知道。(给被除数加上一个除数不影响取余的值)(如果这里n较大或者x取0时都有可能使x-n变为负数,特别的:当n过大时,可以考虑在括号内加多个N,来保证是正数的取余)...原创 2020-11-14 13:19:10 · 301 阅读 · 0 评论 -
乘法与指数
求一个数x的n次方:先定义一个初值数a=1,然后让a循环“*=x”n次a即为x的n次方求x重复出现n次的数:为数学问题,只要先求得10的n+1次方再减1除9乘x即可得原创 2020-11-13 15:31:54 · 340 阅读 · 0 评论 -
除法和取余
如果将一个6位十进制整型数据对1000做除法,获得的是其前三位的数据;而如果将其对1000取余获得的则是其后三位的数据可以通过除法和取余获得数据某一位的值原创 2020-11-12 19:46:12 · 312 阅读 · 0 评论 -
求n是否是素数(质数)
判断n能否被2到n-1整除如果都不能,则n为素数注意不要把0和1加进去,0会导致分母为0的情况,1则必定整除影响判断#include <stdio.h>int main(){ int i, n; scanf("%d", &n); for(i=2; i<n; i++) { if(0==n%i) break; } if(i<n) printf("no prime"原创 2020-11-12 19:33:23 · 278 阅读 · 0 评论 -
求十进制整数的位数
输入十进制正整数x定义记录位数的变量n=0while循环,x每缩小10倍,n=n+1,循环判断为x或x>0输出位数nint x;scanf("%d", &x);int n = 0;while(x){ x /= 10; n++;}printf("%d", n);原创 2020-11-12 19:09:50 · 2270 阅读 · 0 评论 -
判断数据某一位的奇偶性
使用位与操作符&可以获得十进制数值对应二进制数值的指定位上的信息。(二进制数与1位与不改变其值,与0位与则清零)十进制整型数据比如要得到其百位的奇偶性,可以先将其除100使百位变为个位,再与1位与即可得到百位的奇偶性,是奇数则位与结果为1,偶数为0(奇数等价于二进制下最后一位为1,偶数则为0;且十进制的奇偶性只取决于个位的奇偶性)...原创 2020-11-11 22:03:37 · 336 阅读 · 0 评论