青少年编程知识记录 codecoming

C++小项目——实时钟表

0.前言在很多游戏中,我们要使用时间,这个时间一个是系统当前的时间,一个是服务器给你的时间。这篇文章我们尝试做一个模拟时钟。效果图如下1.任务分解1.首先我们尝试使用easyx来画一个。基本框架如下:#include<graphics.h> #include<conio.h> #define High 480  //画布高 #define Width 640  //画布宽度 i
作者:亿万年的星光 分类:C++目录 浏览:

组合数的写法

前面我们写过 全排列和排列数 等。这篇文章。我们写一下组合数。例题:从n个数中,选出m个,一共有多少种不同的选法?这是一道典型的组合数公式。我们直接用dfs公式肯定会出现重复的。#include<bits/stdc++.h> using namespace std; int n,m; int pd[100],ans[100];//pd数组是判断是否用过这个数,ans是结果数组 void print() { 
作者:亿万年的星光 分类:C++目录 浏览:

质数(素数)的判断

一、定义法// 1 定义法(除了1和他本身之外,没有任何一个数能被整除)(试除法) bool is_prime3(unsigned long long n) { //slow     for (int i = 2; i < n - 1; i++) { &nb
作者:亿万年的星光 分类:C++目录 浏览:

NOIP/CSP-J复赛历年考点

2000计算器的改良税收与补贴乘积最大单词接龙模拟、字符串模拟字符串、动态规划广度优先bfs、字符串2001数的计数最大公约数与最小公倍数求先序排列装箱问题模拟模拟、函数二叉树贪心2002级数求和选数产生数过河卒模拟模拟、素数、DFS、组合高精度深搜(dfs)2003乒乓球数字游戏栈麦森数模拟、字符串DFS、DP栈素数、高精度2004不高兴的津津花生采摘FBI树火星人模拟、数组贪心二叉树全排列、STL2005淘淘摘苹果校门外的树采药循环模拟、数组模拟,数组贪心高精度、数学、数论、递推2006明明
作者:亿万年的星光 分类:C++目录 浏览:

2021CSP-J/S全国晋级二轮分数线公布

普及组CSP-J

序号省市CSP-J人数CSP-J晋级晋级比例最高分晋级最低分
1甘肃

13413399.25%8615
2宁夏10310198.06%6524
3天津46345197.41%8615.5
4云南40237894.03%79.517
5湖北68063292.94%89.526
6海南18617091.40%73.529
7陕西49344790.67%

93.528
8广西79568085.53%8628
9山西77362881.24%95.530
10贵州44733174.05%7130
11吉林45433273.13%9133
12河南111479871.63%

88.534.5
13内蒙古564071.43%58

34.5
14黑龙江35420557.91%8224.5
15新疆42523856.00%81.539
16江西48524750.93%86.636.5
17辽宁4752350.32%90

40
18湖南152874448.69%93.515
19香港723548.61%10045.5
20河北112251846.17%

93.540
21

澳门1033937.86%8231
22重庆143054137.83%9451.5
23上海2841100735.45%94.552.5
24安徽4731155832.93%98.534
25北京339794127.70%

96.553
26四川302870423.25%98.517
27江苏417273717.67%98.538
28广东562798617.52%95.558.5
29浙江606794615.59%9866
30山东11450132611.58%9815



山东普及组分数线55

小学组43





作者:亿万年的星光 分类:C++目录 浏览:

如何估算时间复杂度

首先:

  常见的算法时间复杂度由小到大依次为:Ο(1)<Ο(log2n)<Ο(n)<Ο(nlog2n)<Ο(n^2)<Ο(n^3)<…<Ο(2^n)<Ο(n!)

时间复杂度可以简单理解为最多执行次数。



一、O(1)

一般情况下没有其他循环和递归调用,时间复杂度一般都是O(1)。比如下面这样的代码

#include<iostream>  using namespace std;  int main(){  	int a=0,b=0,x=0,y=0;  	cin>>a>>b;  	x=a+b;  	y=a-b;  	if(x>y){  	 cout<<x;  	}else{  	 cout<<y;  	}  	return 0;  }

二、O(n)

一般情况下,一个循环的时间复杂度是O(n),多个循环并列也是取循环次数最多的那个作为时间复杂度。当数据量增大n倍,耗时增大n倍。

#include<iostream>  using namespace std;  int main(){  	int a=n;  	cin>>n;  	for(int i=0;i<n;i++){  	    cout<<i;  	}  	return 0;  }



三、O(n2)、O(n*m)

双重循环嵌套一般就是O(n2)。当数据量增大n倍,耗时增大n方倍。

#include<iostream>  using namespace std;  int main(){  	int n=0;  	cin>>n;  	for(int i=0;i<n;i++){  	    for(int j=0;j<n;j++){  	        cout<<i;  	    }  	}  	return 0;  }

如果循环嵌套外层循环是n,内层循环是m。

#include<iostream>  using namespace std;  int main(){  	int n=0,m=0;  	cin>>n>>m;  	for(int i=0;i<n;i++){  	    for(int j=0;j<m;j++){  	        cout<<i;  	    }  	}  	return 0;  }

这个时候的时间复杂度是O(n*m)。



四、O(logn)

当数据增大n倍时,耗时增大logn倍。

#include<iostream>  using namespace std;  int main(){  	int n=0;  	cin>>n;  	for(int i=0;i<n;i++){  	   i*=2;  	   cout<<i;  	}  	return 0;  }

本来循环次数是n,现在i*=2了。那么答案是log(2)(n)。

反着想也可以,原来循环n次,现在每次i变成原来的2倍,也就是2的k次方等于n。那么正好就是log(2)(n),即O(log n)



或者下面这样:

#include<iostream>using namespace std;  int main(){  int n=0;  cin>>n;  while((n=n/2)>0){      cout<<n;  }   return 0;  }

时间复杂度也是O(logn)



五、O(nlogn)

一般归并排序和堆排序是O(nlogn)。 

常见的是外层循环的时间复杂度是n,内层循环的时间复杂度是logn。

比如下面这样:

for(int i=1; i<=n; i++)  {  	for(int j=1; j<=n; j+=i)  	{  		.....   //复杂度为O(1);  	}  }

注意:外层循环是n,内层循环j每次都增加i。

作者:亿万年的星光 分类:C++目录 浏览:

指针(三):指针与函数

1.交换的例子#include<iostream> #include<cstdio> #include<cstring> using namespace std; void swap(int x, int y){ int a=x; x=y; y=a; cout<<"函数内部"<<x<<" &q
作者:亿万年的星光 分类:C++目录 浏览:

指针(二):指针与数组

1.指针与数组的关系

    指向数组的指针变量称为数组指针变量。“数组是内存上一块连续的空间”。数组名就是这块连续空间的首地址。



2.指针指向数组



    一开始的数组定义与输出:

#include<iostream>  #include<cstdio>  using namespace std;  int main(){  	int a[10];  	for(int i=0;i<5;i++){  		cin>>a[i];  	}  	for(int i=0;i<5;i++){  		cout<<a[i]<<" ";  	}  	return 0;  }

指针操作也可以输入数据:

#include<iostream>  #include<cstdio>  using namespace std;  int main(){  	int a[10];  	for(int i=0;i<5;i++){  		scanf("%d",a+i); //本来写成scanf("%d",&a[i]);   	}  	for(int i=0;i<5;i++){  		printf("%d ", *(a+i));  //  	}  	return 0;  }

上面这个操作,本来scanf("%d",&a)写法,其中&是取地址符,a是数组名,本来就表示数组空间的首地址,所以可以直接用。注意,这个地方不能用cin。

数组指向指针操作:

我们可以定义指针变量,让它来指向数组名。

#include<iostream>  #include<cstdio>  using namespace std;  int main(){  	int a[10];  	int *p=a;    	for(int i=0;i<5;i++){  		scanf("%d",p+i); //本来写成scanf("%d",&a[i]);   	}  	for(int i=0;i<5;i++){  		printf("%d ", *(p+i));   	}  	return 0;  }

2.指针的加减

指针也是变量,可以加减。

#include<iostream>  #include<cstdio>  using namespace std;  int main(){  	int a[10]={1,2,3,4,5};  	int *pa=a;    	cout<<a[0]<<endl; //结果是1   	cout<<pa<<endl;   //0x70fdf0  	cout<<*pa<<endl;  //结果是1  	  	pa++;  	cout<<pa<<endl; //0x70fdf4  	cout<<*pa<<endl;  //2  	  	pa=pa+2;  	cout<<pa<<endl; //0x70fdfc  	cout<<*pa<<endl;  //4  	  	pa--;  	cout<<pa<<endl; //0x70fdf8  	cout<<*pa<<endl;  //3   	return 0;  }
作者:亿万年的星光 分类:C++目录 浏览:

指针(一):基础用法

1.定义什么是指针,简单来说:“指针就是地址”。2.指针变量的定义指针变量定义形式:  类型说明符  *变量名其中,*号表示指针变量。变量名即为定义的指针变量名,类型说明符表示该指针变量所指向的变量的数据类型。普通变量:int a=5;解释:定义了变量a,是int型的,值为5。内存中有一块内存空间是放a的值。对a的存取操作就是直接到这个内存空间存取。内存空间的位置叫地址,存放5的地址可以用取地址操作。用“&”符号运算得到。即&a;指针变量:int *p=NUL
作者:亿万年的星光 分类:C++目录 浏览:

判断闰年

代码参考:#include<iostream>  using namespace std; //判断闰年的函数  int leap(int year){ if((year%4!=0)||(year%100==0&&year%400!=0)) return 0;  //0表示是平年 else return 1; //1表示是闰年 }

标签: 闰年

作者:亿万年的星光 分类:C++目录 浏览: