
C
Every DAV inci
这个作者很懒,什么都没留下…
展开
-
PTA 4-2-6 找完数 (20 分)
在做循环题的时候经常碰到的题型就是要你做取余运算,这时候通常要把原数存储起来,为了后面做判断用或者其他用。原创 2021-11-13 19:26:02 · 2517 阅读 · 0 评论 -
求两个数的最大公约数和最小公倍数
当a和b均为奇数,利用更相减损术运算一次,gcb(a,b) = gcb (b, a-b), 此时a-b必然是偶数,又可以继续进行移位运算。这个方法真的是很厉害,但是有点难理解,对于原理的理解比较重要,但其实最常用的还是辗转相除法和更相减损术。当a为偶数,b为奇数,gcb(a,b) = gcb(a/2, b) = gcb (a>>1, b)当a为奇数,b为偶数,gcb(a,b) = gcb(a, b/2) = gcb (a, b>>1)一会再写一种递归的思想,代码会更简洁,递归很重要!怎么求最小公倍数呢?原创 2021-10-29 18:05:49 · 1636 阅读 · 0 评论 -
C90标准中无符号数与有符号数的比较以及原因解释(关系式-2147483648<2147483647结果为假)
可以看到如上结果,第一个结果看起来非常不符合常识为什么得到的结果是0即false,而对 i 赋值,在进行的比较运算得到的结果却是1即true呢? 在C90标准下,编译器在处理常量时,会按照的顺序确定数据类型,为32位带符号整数,位32为无符号整型,为64位带符号整型,为64位无符号整型。原创 2021-10-19 23:44:22 · 3045 阅读 · 2 评论 -
素数判断方法的改进迭代
三种方法的时间复杂度从O(n) -> O( log(n) ) -> O( log(n) / 2 )效率是在一步步的提高的。原创 2022-10-27 00:59:30 · 238 阅读 · 0 评论 -
AVL-Review
F(3) = F(0) + F(1) + 1 = 4, 即如果树的深度为2, 那么树中至少有4个节点。F(6) = 33 ----> 即如果树的深度要为6, 那么该树拥有的最少节点应为33。F(n)所求的皆为深度为n时的最少节点数, 如果小于该节点数, 则无法有第n层。:树的根节点到该节点的边的个数,树的深度等于树中该节点的最大层次。F(0) = 1, 即如果树的深度为0, 那么树中至少有1个节点。F(1) = 2, 即如果树的深度为1, 那么树中至少有2个节点。原创 2022-10-24 20:29:45 · 656 阅读 · 0 评论 -
一个for循环计算阶乘和
在前面一个阶乘已经算出来的基础上, 只需要乘以一个更新过的i, 就可以得到下一个数的阶乘。但是阶乘的计算具有连续性, 即一个数的阶乘只需要在前一个数的阶乘的基础上再乘上一个数。平常我们都习惯了用两个for循环或者是定义一个fact(i)但fact函数中的实现也是一个for循环。所以可以用一个for循环解决问题。所以实质上都是两个for循环。即4的阶乘等于3的阶乘乘以4。一个for计算一个数的阶乘。原创 2022-10-23 22:16:49 · 2019 阅读 · 0 评论 -
7-2 换硬币 (20分)
要求按5分、2分和1分硬币的数量依次从大到小的顺序,输出各种换法。每行输出一种换法,格式为:“fen5:5分硬币数量, fen2:2分硬币数量, fen1:1分硬币数量, total:硬币总数量”。所以在计算某一种硬币时的数量上限时,就可以用总数将其他两枚硬币的数值下限的和减掉。相较于直接用总数值去除以硬币数值得到硬币的数量上限的计算方法来说。输入在一行中给出待换的零钱数额x∈(8,100)。这题要判断一下不同数值的硬币换取的上限。2分和1分硬币的数值上限计算也是这样。这种方法能减少一些判断次数。原创 2022-10-21 15:23:24 · 497 阅读 · 0 评论 -
PTA-统计一批学生的平均成绩与不及格人数
输入在一行中给出一系列非负实数,其间以空格分隔。当读到负实数时,表示输入结束,该数字不要处理。其中平均值精确到小数点后两位,等号的左右各有一个空格。之前写的没有在过程中计算average。但是由于某些规范原因在PTA中会显示。关于这题,PTA的判题格式有些严格。以下代码没有问题可以AC。在编译器中可以正常运行。原创 2022-10-20 09:03:15 · 2751 阅读 · 0 评论 -
转义字符的问题
ASCII码, 八进制和十六进制表示转义字符原创 2022-08-21 23:42:25 · 628 阅读 · 0 评论 -
memset函数及其用法
每种类型的变量都有各自的初始化方法,memset() 函数可以说是初始化内存的“万能函数”,通常。它是,mem即“内存”(memory)的意思。函数的功能是:将指针变量 s 所指向的用一个“整数” c 替换,注意 c 是 int 型。s 是 void* 型的指针变量,。,而且通常是给进行初始化。当然,数组也可以直接进行初始化,但 memset 是对数组或结构体进行的最快方法,。一般的变量如 char、int、float、double 等类型的变量, 如果用 memset 的话反而显得麻烦。原创 2022-08-21 23:06:29 · 103 阅读 · 0 评论 -
7-2-6 方阵循环右移 (20 分)
7-2-6 方阵循环右移 (20 分)记录一个很好的思路:/*这个题目分成两部分输出就好考虑多了*/ #include<stdio.h>int main(){ int a[10][10],i,j,n,m; scanf("%d %d",&m,&n); for(i=0;i<n;i++) for(j=0;j<n;j++) scanf("%d",&a[i][j]); m=m%n; //可能会出现m比n还大所以取余数 for(i=0;i&l原创 2021-12-26 12:14:24 · 855 阅读 · 0 评论 -
7-1-9 交换最小值和最大值 (15 分)
交换最大值和最小值从大一到现在也写了不少题了,也积累了一些经验,形成了自己的一些刷题的风格,也还是一直会出现一些问题,有的问题是因为既有的习惯风格为了让思路清晰、代码较为规整会尽可能的减少变量的使用。这一题就是这样,总是试图用一个变量去完成一个乃至多个功能,使得代码看起来简洁,但是有时候有些变量必须使用。这是一道看起来很简单的题,只有一点点的小弯,这个小弯就是下标以及相对应的值的存储和交换,多定义一个变量用来存储交换就好。#include<stdio.h>//先让最小值和第一个数交换,原创 2021-12-26 08:25:49 · 3578 阅读 · 3 评论 -
逗号表达式 || 形参和实参的区别
逗号表达式 || 形参和实参的区别逗号运算符: 在C语言中,多个表达式可以用逗号分开,其中用逗号分开的表达式的值分别结算,但 整个逗号表达式的值是最后一个表达式的值。 所以exec((v1,v2), (v3,v4,v5),v6,v7)相当于exec(v2, v5,v6,v7)。形参和实参的区别:声明定义函数的时候,exec((v1,v2), (v3,v4,v5),v6,v7)括号内的参数叫做“形式参数”,**不是实际的参数变量,是用来接收传递的参数的。**而实际调用函数的时候,括号内应该填上原创 2021-12-18 22:17:56 · 349 阅读 · 0 评论 -
冒泡排序和选择排序
冒泡排序和选择排序 用了c++之后再回到c语言写排序好陌生(垂头) 记得大一的时候总是搞不清楚这两个排序,现在回过头来看发现还是要根据图来理解,而不是找代码的特征来记(扇耳刮子)冒泡排序:可以看到第一个数组肯定是从0开始作比较的,并且比较到最后一次由于已经固定一个最大值,所以最后一次就没必要比较了,所以循环上限要减去1;随着最大值一个一个的被固定,所以二次循环的比较次数应该是越来越少的,大循环执行一次就固定一个最大值所以二次循环的范围上限要在外部循环范围上限的基础上再减去iint n;原创 2021-12-17 22:43:49 · 212 阅读 · 0 评论 -
static定义变量的值问题
static定义变量的值问题 #include <stdio.h> int f(int x) { static int y=1; x+=y; y++; return x; } int main(void) { int k; k=f(3); printf("%d %d\n",k,f(k)); //%d和%d之间只有1个空格 return 0; }原创 2021-12-11 16:43:16 · 1885 阅读 · 3 评论 -
三目运算符的理和a++和++a计算过程性问题
三目运算符的理和a++和++a计算过程性问题1、三目运算符的理解问题:b ? x : y表示的意思是:如果b为真,计算x的值,运算结果为x的值;如果b为假,计算y的值,运算结果为y的值.三目运算符是右结合性的,比如b ? x : y ? c : d所表示的意思是 b ? x : ( y ? c : d ).2.a++和++a计算过程性问题 ++a与a–,有两种使用情况: 一种是前面有变量进行赋值的情况; 一种是前面没有变量,出现在某些计算过程中的情况.原创 2021-12-11 14:56:41 · 806 阅读 · 0 评论 -
判断一个数高位到低位是否是从小到大排列
判断一个数高位到低位是否是从小到大排列输入一批正整数(以零或负数为结束标志),判断每个数从高位到低位的各位数字是否按值从小到大排列。要求定义和调用函数fun(m)判断m中各位数字是否按值从小到大排列,满足条件返回1,否则返回0。#include <stdio.h>int fun(int n){ int old_digit = 10; int cur_digit; while(n > 0) { cur_digit = n % 10;原创 2021-12-11 13:28:52 · 5620 阅读 · 0 评论 -
7-1-1 简化的插入排序 (15 分)
7-1-1 简化的插入排序 (15 分)本题要求编写程序,将一个给定的整数插到原本有序的整数序列中,使结果序列仍然有序。输入格式:输入在第一行先给出非负整数N(<10);第二行给出N个从小到大排好顺序的整数;第三行给出一个整数X。输出格式:在一行内输出将X插入后仍然从小到大有序的整数序列,每个数字后面有一个空格。输入样例:51 2 4 5 73结尾无空行输出样例:1 2 3 4 5 7 结尾无空行代码:#include<stdio.h>int main原创 2021-11-30 09:15:57 · 772 阅读 · 1 评论 -
7-2 单词首字母大写 (15 分)
本题目要求编写程序,输入一行字符,将每个单词的首字母改为大写后输出。所谓“单词”是指连续不含空格的字符串,各单词之间用空格分隔,空格数可以是多个。原创 2021-11-29 00:10:34 · 11526 阅读 · 6 评论 -
AVL Insertion(30分)
AVL Insertion(30分)You are supposed to implement the Insert function, which inserts an integer Key into an AVL tree T. The resulting tree must be returned.Format of function:AVLTree Insert ( AVLTree T, int Key );where AVLTree is defined as the followin原创 2021-11-29 00:11:51 · 685 阅读 · 0 评论 -
三元组顺序表表示的稀疏矩阵转置(10分)
三元组顺序表表示的稀疏矩阵转置(10分)本题要求实现一个函数,实现三元组顺序表表示的稀疏矩阵转置。函数接口定义:struct tripletable * trans(struct tripletable *t1);其中 t1 是用户传入的参数。 函数须返回转置后的三元组顺序表指针。裁判测试程序样例:#include <stdio.h>#include <stdlib.h>#define M 100struct node{ int i,j,v;};st原创 2021-11-29 00:11:45 · 3878 阅读 · 0 评论 -
哈夫曼树及哈夫曼编码(10分)
哈夫曼树及哈夫曼编码(10分)*函数SelectTwoMin(int upbound, HuffmanTree HT, int &s1, int &s2)是从1到upbound中找出father为0的节点赋给s1,s2,(为了保证答案唯一,请让s1的节点编号小于s2),函数HuffmanCoding(HuffmanTree &HT, HuffmanCode &HC, int w, int n)是构造哈夫曼树以及计算哈夫曼编码。保证输入的权重值小于1000。函数接口定义:原创 2021-11-29 00:11:38 · 3055 阅读 · 0 评论 -
KMP算法(15分)
KMP算法(15分)函数get_nextval(char T[], int nextval[])是计算字符串T的next数组,函数Index_KMP(char S[], char T[], int pos, int next[])是KMP算法。函数接口定义:void get_nextval(char T[], int next[]);int Index_KMP(char S[], char T[], int pos, int next[]);其中 T 是模式串,S是主串,next是next数组。原创 2021-11-29 00:11:31 · 3613 阅读 · 0 评论 -
ASCII码对照表
ASCII码值好多地方都会用到,每次用都要查😒。原创 2021-11-29 00:11:22 · 4674 阅读 · 0 评论 -
7-1 近似求PI (15 分)
7-1 近似求PI (15 分)本题要求编写程序,根据下式求π的近似值,直到最后一项小于给定精度eps。2π=1+31!+3×52!+3×5×73!+⋯+3×5×⋯×(2×i+1)i!+⋯输入格式:输入在一行中给出精度eps,可以使用以下语句来读输入:scanf("%le", &eps);输出格式:在一行内,按照以下格式输出π的近似值(保留小数点后5位):PI = 近似值输入样例:1E-5结尾无空行输出样例:PI = 3.14158结尾无空行代码:#inclu原创 2021-11-29 00:11:09 · 4652 阅读 · 0 评论 -
6-8 使用函数求余弦函数的近似值 (15 分)
/**写一个方法解析,便于以后的理解这个题跟其他的循环题最大的不同就是在循环变量的同时还有一个求阶乘的要求,所以要在一个函数中完成看似要两个函数完成的要求那么只需要在while中写一个求阶乘的方法就可以了初始化的值都是第二次要用到的值,也就是默认第一项执行过的值为初始值之后在变量的求值和变化中要注意顺序这题就是先变化分母,因为分母要通过阶乘来求得,其中要写一个for循环,写前面可以让程序看起来好看一点再求分子再求某一项的值再求sum,在求sum中乘上正负符号变量因为分母每一次要加2然..原创 2021-11-27 23:12:06 · 7486 阅读 · 8 评论 -
判断素数的方法
判断素数的方法素数的定义:素数指的是除了1和它本身,不能被任何数整除。由素数的定义我们可以推的判断素数的方法: 判断一个数m是不是素数,只需要用m去除以2~m-1中的数,如果都不能整除,那么这个数就是素数现在要简化素数的判断方法:不用让m去除以2~m-1中的全部数,只需要让m去除以2 ~ 之间的每一个数就可以了。如果 m 不能被 2 ~ 间任一整数整除,m 必定是素数。这个简化方法基于一条已经经过证明的定理:因为如果 m 能被 2 ~ m-1 之间任一整数整除,其两个因子中必定有一个小原创 2021-11-13 21:59:52 · 1038 阅读 · 0 评论 -
求两个数的最大公约数和最小公倍数
求两个数的最大公约数和最小公倍数一查发现竟然有这么多种方法,除了之前最常用的辗转相除的方法,还有不包括辗转相除的其他三种办法辗转相除法又称欧几里得算法,据说是最早的算法,是西方的算法东方的有《九章算术》中的更相减损术还有将辗转相除法和更相减损术结合起来的运用了移位运算的方法直接写代码了辗转相除法的依据是一条定理:两个正整数a和b(a>b),它们的最大公约数等于a除以b的余数c和b之间的最大公约数。这是迭代的思想一会再写一种递归的思想,代码会更简洁,递归很重要!!!//使用辗转相除原创 2021-11-13 21:06:29 · 693 阅读 · 0 评论 -
C语言中字符、字符数组、字符串
定义一个字符变量只能初始化一个字符,而这种情况无法满足大多数情况的需要,当遇到多个字符的输入输出问题时就需要用到字符数组(字符串)。【分析】显然与上一个程序的执行情况不同,这次程序执行了两次从键盘的读入,而且第一个 字符串 取了。C语言中没有专门的string字符类型,所以要想表示一系列的字符集合就要用到字符数组。通过程序运行可以发现,逐个字符赋值的初始化方式和整型数组的初始化是相同的,好像不加。也就是说,在C语言中,字符串是用字符数组来表示的。的初始化方式(也就是初始化数组的方式),一种是。原创 2021-11-28 00:10:07 · 617 阅读 · 0 评论