程序设计与算法(一) C语言程序设计
文章平均质量分 95
yanyanwenmeng
这个作者很懒,什么都没留下…
展开
-
13.2 map
map<string,int> mp;string name;int score;cin >> name >> score;mp.insert(make_pair(name,score));cout << mp["lily"];//返回的是lily对应的score的值比如说:cin : lily 78则cout: 7...原创 2018-09-12 00:50:31 · 205 阅读 · 0 评论 -
9.2、9.3 指针和字符串、字符串操作库函数
#include<iostream>using namespace std;int main(){ char * p = "Please input your name:";//字符串常量的类型是char * //cout << p << endl; printf(p); char name[20];//字符数组的名字也是char * 类型...原创 2018-07-23 00:05:33 · 201 阅读 · 0 评论 -
6.3 递归初步(阶乘、斐波拉契数列)
递归一定要有终止条件。n!递归公式:f(n)= n*f(n-1)不用递归:#include<iostream>#include<cstdio>using namespace std;int main(){ int n, f1, f2, f3; cin >> n; f1 = 1, f2 = 1; if(n == 1 || n == 2) cou...原创 2018-07-16 01:39:04 · 282 阅读 · 0 评论 -
6.2 函数(2)
数组形参的改变会影响实参的改变。Swap(a,b)改变的只是形参的值,是实参拷贝过去的值,并不影响实参的改变。#include<iostream>using namespace std;int a1[4] = {4, 5, 6, 9};int a2[] = {3, 18, 56, 40, 78};int FindMax(int a[], int length){ int m...原创 2018-07-16 01:16:47 · 168 阅读 · 0 评论 -
6.1 函数(1) (素数、牛顿迭代法求平方根)
#include<iostream>using namespace std;int Max(int x, int y){ if(x > y) return x; else return y;}int main(){ int n = Max(4,6);//6 cout << n << "," << Max(20,...原创 2018-07-15 23:15:53 · 307 阅读 · 0 评论 -
9.1 指针和二维数组 指向指针的指针
二维数组里面的数再内存里面是连续存放的int a[M][N]: a[i] 的类型是T *;第i行int a[i]: a的类型是T *#include<iostream>using namespace std;void reserve(int *p, int size) { for(int i = 0; i < size/2 ; ++i...原创 2018-07-21 00:14:51 · 1669 阅读 · 0 评论 -
10.1 结构(结构体、结构数组、结构指针)
结构相当于一种新的数据类型,如int 、 char 、float之类的数据类型,只不过是我们自己定义的,定义的时候不要忘了{}后面的分号。结构既然是一种变量类型,那就和我们常用的int、char、float等的类型使用原理是一样的。只不过运用的时候表达方式略微有点差距罢了。 结构体把很多类型不一样的数据整合在一起了,相当于自己定义了一种新的数据类型,后面可以直接拿...原创 2018-07-26 13:37:57 · 2511 阅读 · 0 评论 -
第五周测验
1. 与指定数字相同的数的个数 点击打开链接描述输出一个整数序列中与指定数字相同的数的个数。输入输入包含三行:第一行为N,表示整数序列的长度(N <= 100);第二行为N个整数,整数之间以一个空格分开;第三行包含一个整数,为指定的整数m。输出输出为N个数中与m相同的数的个数。样例输入32 3 22样例输出2查看#include<iostream>#define MAXN ...原创 2018-07-15 20:21:11 · 1542 阅读 · 0 评论 -
8.5 指针和数组
指针常量指向的地方是固定的,不能对他再赋值。列如数组的名字指向数组的起始地址,就不能再指向其他地方了。不能对a进行赋值,但是可以用a赋值给其他(T *)类型的指针。即a不能放在等号左边。sizeof(p) = 4 int p[ ] 无从知晓他的大小,系统会将他看做指针看待。p[ ] <=> * p。 #include<iostream>...原创 2018-07-20 22:31:47 · 177 阅读 · 0 评论 -
8.4 指针作为函数参数(空指针 、交换两个变量的值)
【注意】地址0不能访问。空指针:内容为0的指针(因为空指针里面不放置内容);或者是地址为0的指针。NULL实际上就是整数0。NULL可以用来代表空指针。int * p2 = 0; 表示p2指向地址0。 不能写*pn = 。。int n=* pn;这种表达是错误的,因为绝大多数操作系统都不允许访问地址为0的内容,写读都不可以。if(p) 相当于 p为真,即p...原创 2018-07-20 18:02:31 · 3826 阅读 · 0 评论 -
5.5 二维数组
int a[3][4];a[0][0] a[0][1] a[0][2] a[0][3]a[1][0] a[1][1] a[1][2] a[1][3]a[2][0] a[2][1] a[2][2] a[2][3] #include<iostream>#define ROWS 8#define COLS 8int a[ROWS+3][COLS+3]; int b[ROWS+...原创 2018-07-15 11:30:00 · 492 阅读 · 0 评论 -
5.4 数组越界
#define MAXN 10000000int a[MAXN + 10];//防止数组越界,多分配一些存储空间原创 2018-07-14 22:41:46 · 174 阅读 · 0 评论 -
5.3 数组初始化
#include<iostream>#include<cstdio>int main(){ int n; scanf("%d", &n); switch(n) { case 1://如果n==1 printf("Monday.");//输出Monday break;//跳出整个switch循环 case 2: print...原创 2018-07-14 22:33:12 · 161 阅读 · 0 评论 -
8.3 指针的运算
比较大小就是比较地址大小。p1 - p2: p1和p2之间能够存放多少个T类型的变量。比如int类型,sizeof(int)=4,4个字节为一个变量。p + n, p - n为 T * 类型;* (p + n), *(p - n) 为 T类型。n可以是变量(整数类型)表达式,不仅仅限于变量或者常量。#include<ios...原创 2018-07-20 12:38:29 · 209 阅读 · 0 评论 -
5.2 筛法求素数
一个数,如果只有1和它本身两个因数,这样的数叫质数(或素数)。如2、3、5、7都是质数。 一个数,如果除了1和它本身还有别的因数,这样的数叫合数。如4、6、15、49都是合数。 1既不是质数,也不是合数。 #include<iostream>#include<cstdio>using namespace std;int main(){ int ...原创 2018-07-14 17:53:11 · 351 阅读 · 0 评论 -
10.3 变量的作用域与生存期
变量的作用域:变量起作用的范围。变量的生存期:变量所占内存占用的时期。原创 2018-08-22 22:34:36 · 245 阅读 · 0 评论 -
11.4 找一对数
给出一个整数K和一个无序数组A,A的元素为N个互不相同的整数,找出数组A中所有和等于K的数对。例如K = 8,数组A:{-1,6,5,3,4,2,9,0,8},所有和等于8的数对包括(-1,9),(0,8),(2,6),(3,5)。 Input 第1行:用空格隔开的2个数,K N,N为A数组的长度。(2 <= N <= 50000,-10^9 <= K <= 10^9)...原创 2018-08-31 00:21:34 · 419 阅读 · 0 评论 -
10.2 全局变量、局部变量、静态变量(strtok的用法以及实现原理)
全局变量定义在所有函数外面,所有函数都可以调用全局变量。但是局部变量只能在定义它的函数中使用,不能用在其他函数中。#include<iostream>using namespace std;void Func(){ static int n = 4;//静态变量只初始化一次,下次调用的时候不会再次初始化,会直接跳过这个语句 cout <<...原创 2018-08-21 00:55:21 · 288 阅读 · 0 评论 -
第十二周测验
10687 sort 简单题 http://cxsjsxmooc.openjudge.cn/2016hw12/1/10688 还是 sort 简单题 http://cxsjsxmooc.openjudge.cn/2016hw12/2/10689 点集的查询 http://cxsjsxmooc.openjudge.cn/2016hw12/3/3341 Set http://cxsjsxm...原创 2018-09-09 15:02:12 · 1034 阅读 · 0 评论 -
13.1 multimap
【注意】multimap是对关键字first进行从小到大排序用multimap进行插入的时候,用了make_pair.mp.insert(make_pair(st.score, st.info))make_pair生成了一个pair(int, StudentInfo)变量其first等于st.score;second等于st.in...原创 2018-09-11 22:57:38 · 243 阅读 · 0 评论 -
12.4 set和pair
set里面不允许有重复的元素,所以如果插入的数set里面已经有了,就会导致插入不成功。pair中的两个数命名一定是first和second,只不过变量类型可以不一致而已。#include<iostream>#include<set>using namespace std;int main(){ int a[]={1,2,3,8...原创 2018-09-05 16:53:10 · 836 阅读 · 0 评论 -
12.3 自定义规则的multiset
#include<iostream>#include<algorithm>#include<set>using namespace std;struct rule{ bool operator()(const &a1, const &a2) { return a1%10 < a2%10; }};...原创 2018-09-05 16:24:30 · 708 阅读 · 0 评论 -
12.3 multiset(平衡二叉树)
multiset、set、multimap、map 里面的数据是自动排好序的,不用管数据插入|删除的位置,数据改变后依然会自动排序。set:集合,multiset:排好序的集合 【注意】要访问multiset中的元素必须要使用迭代器(类似于指针)。指针比较大小比较的是地址的大小。指针加减整数:int *p1,*p2;p1 + n;// 地址p1+ n ...原创 2018-09-05 12:24:38 · 547 阅读 · 0 评论 -
12.1 STL排序算法sort
从小到大排序:对a[]中的n个数进行排序,数组下标从1 开始 sort(a+1,a+1+n);对a[]中的n个数进行排序,数组下标从0开始sort(a,a+n);operator()相当于就是一个函数名,但是()不可以省略。另一种使用方法:比如成绩排序:描述给出班里某门课程的成绩单,请你按成绩从高到低对成绩单排序输出,如果有相同分数则名字字...原创 2018-09-04 14:25:44 · 287 阅读 · 0 评论 -
二分法求解最大最小值模板
二分法题解:https://www.cnblogs.com/hyl2000/p/5734908.html这类问题有个明显的特征:使最小值最大或者使最大值最小。这个时候大概步骤就是先对读进来的数据进行排序(因为二分查找是在有序的数据上进行的)然后执行二分。其中二分里的check函数是最关键的部分,例如第一题中我们就是二分答案,然后在check中贪心的来安排牛的位置,看是否能够满足答案。而第二题也...原创 2018-09-02 17:20:18 · 4475 阅读 · 0 评论 -
11.3 二分法求方程的根
#include<iostream>#include<cmath>#define EPS 1e-6using namespace std;double a,b,c,d;double f(double x){ return x*x*x*a + b*x*x + c*x + d;}int main(){ cin >> a >&...原创 2018-08-30 14:27:19 · 526 阅读 · 0 评论 -
11.2 二分查找的原理及其实现
pow(2,10)=1024,所以只需要10次。二分查找的数必须为有序的。#include<iostream>using namespace std;int BinarySearch(int a[], int n, int k){ int left = 0; int right = n-1; while(left <= right) { in...原创 2018-08-30 13:10:15 · 428 阅读 · 0 评论 -
12.2 STL二分查找算法
#include<iostream>#include<algorithm>using namespace std;struct rule{ bool operator()(const int &a1, const int &a2) { return a1%10 < a2%10;//个位数从小到大排 }};vo...原创 2018-09-04 23:09:26 · 315 阅读 · 0 评论 -
第十一周测验(二分法)
8208 矩形分割 http://noi.openjudge.cn/ch0111/03/8211 派 http://noi.openjudge.cn/ch0111/05/8209 月度开销 http://noi.openjudge.cn/ch0111/06/8210 河中跳房子 http://noi.openjudge.cn/ch0111/10/1458 Aggressive cows h...原创 2018-09-02 05:32:35 · 2151 阅读 · 0 评论 -
11.1 程序或算法的时间复杂度
要找固定操作a[j]>a[i]和a[k]=a[k-1]可以合并为一个固定操作,因为a[j]>a[i]和a[k]=a[k-1]并不是都要执行pow(n,2)次,所以可以看成他们执行次数的和为O(n2)次。在noi相关比赛时,一定要考虑最坏复杂度。举例:常数复杂度:在一个已经排好序的序列里面求最大值或者最小值,在常数时间内就可以找到最大最小值。...转载 2018-08-30 10:45:41 · 982 阅读 · 0 评论 -
第十周练习
7615 成绩排序 http://noi.openjudge.cn/ch0110/03/7914 分数线划定 http://noi.openjudge.cn/ch0110/05/7618 病人排队 http://noi.openjudge.cn/ch0110/08/10420 mysort http://cxsjsxmooc.openjudge.cn/2016hw10/4/10421 从字...原创 2018-08-25 00:31:01 · 683 阅读 · 0 评论 -
10.4 10.5 选择排序、插入排序、冒泡排序
选择排序:先找最小值,然后交换位置。#include<iostream>using namespace std;int SelectionSort(int a[], int size){ for(int i = 0; i < size - 1; ++ i)//最后一次不用比较 { int tmpMin = i;//假设第i个数最小 f...原创 2018-08-23 22:34:32 · 219 阅读 · 0 评论 -
5.1 数组
【重点】为什么大数组要定义在main函数外面全局变量在静态存储区分配内存,局部变量是在栈上分配内存空间的。(c语言程序在运行时会动态创建一个堆栈段,里面存放着调用栈,保存着函数的调用关系和局部变量。)如果数组太大,可能会造成栈溢出。#include<iostream>#define NUM 100using namespace std;int a[NUM];//数组一般不要定义在...原创 2018-07-14 13:02:31 · 220 阅读 · 0 评论 -
8.2 指针的意义和互相赋值
(1) pn = pcpn是int * 类型的,pc是char * 类型的,类型不匹配,如果一定要使用,必须要使用强制类型转换,将类型转换成一样,才能进行互相赋值。(2) pn = &cc是char类型的,&c是对c取地址,&c是一个指针,类型就是char *,而pn是int * 类型,类型也不匹配。pn = (int *) & ...原创 2018-07-19 20:48:39 · 1238 阅读 · 0 评论 -
第四周测验
1. 角谷猜想描述所谓角谷猜想,是指对于任意一个正整数,如果是奇数,则乘3加1,如果是偶数,则除以2,得到的结果再按照上述规则重复处理,最终总能够得到1。如,假定初始整数为5,计算过程分别为16、8、4、2、1。 程序要求输入一个整数,将经过处理得到1的过程输出来。输入一个正整数N(N <= 2,000,000)输出从输入整数到1的步骤,每一步为一行,每一部中描述计算过程。最后一行输出"En...原创 2018-07-14 02:36:44 · 773 阅读 · 1 评论 -
9.4 void指针和内存操作函数(memset、memcpy)
void指针不用管类型匹配,可以将任何类型的指针赋值给它。 void指针并不知道他的大小,并不想int * ,char * 类型的指针,指导占了几个字节。ch为一个字符的ASCII 码#include<iostream>#include<cstring>using namespace std;char szName[200] ...原创 2018-07-23 15:39:04 · 679 阅读 · 0 评论 -
3.1 if语句
#include<iostream>#include<cstdio>using namespace std;int main(){ int a; cin >> a; if( !(a%2) ) //!0==1 相当于 a%2==0 { cout << "偶数" << endl; } else { cout...原创 2018-07-11 21:20:54 · 194 阅读 · 0 评论 -
第二周测验
选择编程1. 对齐输出描述读入三个整数,按每个整数占8个字符的宽度,右对齐输出它们。输入只有一行,包含三个整数,整数之间以一个空格分开。输出只有一行,按照格式要求依次输出三个整数,之间以一个空格分开。样例输入123456789 0 -1样例输出123456789 0 -1来源#include<iostream>#include<cstdio>i...原创 2018-07-11 13:01:38 · 1759 阅读 · 0 评论 -
2.4 其他运算符及运算符优先级
f=double(n)/2与f=(double)n/2等价#include<iostream>#include<cstdio>using namespace std;int main(){ double f = 9.14; int n = (int)f;//将f强制转换为整型,n=9 f = n/2;//n/2=4,f=4 cout << f...原创 2018-07-11 12:10:35 · 139 阅读 · 0 评论 -
第六周测验
1788:Pell数列 http://noi.openjudge.cn/ch0202/1788/描述Pell数列a1, a2, a3, ...的定义是这样的,a1 = 1, a2 = 2, ... , an = 2 * an − 1 + an - 2 (n > 2)。给出一个正整数k,要求Pell数列的第k项模上32767是多少。输入第1行是测试数据的组数n,后面跟着n行输...原创 2018-07-16 23:07:43 · 1242 阅读 · 0 评论