深入浅出程序设计竞赛笔记(草稿

目录

一、程序

二、分支

三、循环

四、数组

五、字符串

六、文件操作

七、函数

八、结构体

九、模拟

十、高精度

十一、排序

十二、暴力枚举

十三、递推与递归

十四、贪心

十五、二分

十六、搜索

十七、线性表

十八、二叉树

十九、集合

二十、图

二十一、位运算与进制转换

二十二、计数原理与排列组合

二十三、整除理论


一、程序

牛吃草问题

牛顿问题_百度百科 (baidu.com)https://baike.baidu.com/item/%E7%89%9B%E9%A1%BF%E9%97%AE%E9%A2%98/3978438?fromtitle=%E7%89%9B%E5%90%83%E8%8D%89&fromid=8591859&fr=aladdin

错误 代码

#include
using namespace std;
int main(){
	int n1=10,t1=20,n2=16,t2=10;
	//草的生长速度
	//(对应的牛头数×吃的较多天数-相应的牛头数×吃的较少天数)÷(吃的较多天数-吃的较少天数)
	int gro=(n1*t1-n2*t2)/(t1-t2);
	//原有草量
	//牛吃草的速度×吃的天数-草的生长速度×吃的天数
	int ori=n1*t1-gro*t1;
	//吃的天数
	//原有草量÷(牛吃草的速度-草的生长速度)
	int time=ori/(ori/(n1*t1)-gro);
	cout<

字数反转P5705

//P5705
#include
using namespace std;
int main(){
	double n,n1=0;
	//变量使用前查看是否赋值. 
	scanf("%lf",&n);
	int m=10*n;
	while(m!=0){
		n1=m%10+n1*10;
		m /= 10; 
	}
/*
	循环 除法 判断 不要浮点 
	while(n!=0){
		
		n1=(int)n%10+n1*10;
		//取余 只能整数 
		n /= 10;
		cout<
int main(){
	char a,b,c,d;
	scanf("%c%c%c.%c",&a,&b,&c,&d):
	printf("%c.%c%c%c\n",a,b,c,d);
	return 0;
}

 1.单位先统一再计算

小鱼的游泳时间P1425

#include
using namespace std;
int main(){
	int h1,m1,h2,m2;
	scanf("%d%d%d%d",&h1,&m1,&h2,&m2);
	m1+=h1*60;
	m2+=h2*60;
	int h=(m2-m1)/60,m=(m2-m1)%60;
	printf("%d %d\n",h,m); 
	return 0;
} 

2.cout输出浮点数,默认保留不超过6位有效数字

3.数学函数

double sin(double x)

double cos(double x)

double exp(double x)

double log(double x)

double pow(double x,double y)

double sqrt(double x)

double fabs(double x)

double ceil(double x)

double floor(double x)

4.定义常量

const double PI = 3.1415926 

#define PI  3.1415926 

5.命名

1)字母 数字 下划线 -

2)不能数字开头

3)不能和 关键字 重复

6.常见数据类型

7.ASCII表

深入浅出程序设计竞赛笔记(草稿_第1张图片

8.char类型的本质是一个不超过127 的整数

9.利用函数方程等预处理来降低编程难度

10.四舍五入

int (ans + 0.5) 

11.数字反转 

可以考虑 用char“分解”成单个字符

12. 常见输入输出占位符

13.setprecision()

c++ setprecision用法详解 (biancheng.net)http://c.biancheng.net/view/1340.html14.关闭同步加快cin读入速度

在程序前加

ios::sync_with_stdio(false);

15.浮点数误差

1)可以*10转为整数在计算

16.提交评测与错误自查 

二、分支

1.优先级

2.逻辑运算规则

3.

	swith(变量名){
		case 变量可能的情况 1:执行语句1;break;
		case 变量可能的情况 1:执行语句1;break;
		default:执行语句n; 
	}

以点代线  

多个case 

#include
int main(){
	int y,m;
	scanf("%d%d",&y,&m);
	switch(m){
		case 1: case 3: case 5: case 7: case 8: case 10: case 12: 
		printf("%d\n",31);break;
		case 4: case 6: case 9: case 11: 
		printf("%d\n",30);break;
		case 2:
		if(((y % 4 == 0) && (y % 100 != 0)) || (y % 400 == 0)) 
			printf("%d\n",29); 
		else
			printf("%d\n",28);
		break;
	} 
	return 0;
} 

三、循环

四、数组

五、字符串

1.字符数组

//s为数组名
//s中的每一个元素,都储存了一个不超过127的整数,对应ASCII

//输入
    
    scanf("%s",s)
    cin>>s
//只能读到空格或者换行符
//数组多一个:字符串结束后,加 '\0'

    char c = getchar();
//getchar()函数获得输入数据中的一个字符
//每次读入一个字符

//输出

    printf("%s\n",s) 
    cout<

P5733 【深基6.例1】自动修正 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)https://www.luogu.com.cn/problem/P5733

#include
using namespace std;
int main(){
	char a;
	while(1){
		a=getchar();
		if(a==EOF) break;
		if(a<='z'&&a>='a')
			a-='a'-'A';
		putchar(a);
	}
	return 0;
}
#include
using namespace std;
int main(){
	char a[110];
	cin>>a;
	for(int i=0;a[i]!='\0';i++)
		if(a[i]>='a'&&a[i]<='z')
			a[i]-='a'-'A';
	cout<
#include
using namespace std;

char a[110];

int main(){
	scanf("%s",a);
	for(int i=0;a[i]!='\0';i++)
		if(a[i]>='a'&&a[i]<='z')
			a[i] -= 'a'-'A';
	printf("%s\n",a);
	return 0;
} 

 1)主函数可以递归

#include
using namespace std;
char ch;
int main(){
	if(cin>>ch){//判断是否输入 
		if(ch>='a'&&ch<='z')ch+='A'-'a';//转换大小写 
		cout<

 2)toupper函数 小写转大写

int toupper(int c)  
{  
    if ((c >= 'a') && (c <= 'z'))  
        return c + ('A' - 'a');  
    return c;  
}

3)tolower 大写转小写

int tolower(int c)  
{  
    if ((c >= 'A') && (c <= 'Z'))  
        return c + ('a' - 'A');  
    return c;  
}  

4)P1914 小书童——凯撒密码 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)https://www.luogu.com.cn/problem/P1914

圆型的转换 先找偏移量(减去一个最小值) 再取模

#include
using namespace std;
int main(){
	char a[60];
	int n;
	scanf("%d%s",&n,a);
	for(int i=0;a[i]!='\0';i++){
	printf("%c",(a[i]-'a'+n)%26+'a');
	}
	return 0;
}

5) 字母减去‘a’转换为数字

6)P1125 [NOIP2008 提高组] 笨小猴 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)https://www.luogu.com.cn/problem/P1125

7)fgets/sscanf/sprintf/P1957_ppololcsz的博客-CSDN博客https://blog.csdn.net/weixin_60178940/article/details/123535167

2.string类型

//string反转,需包含头文件
reverse(s.begin(),s.end());


//读入直到空格(不包括空格)
string s;
cin>>s;


//读入直到指定字符ch,这里ch不会被读入到s中,而且好像也不会存在于缓冲区中

string s;
getline(cin,s,ch);//第3个参数省略时默认为'\n'

//字符串截取
string s;
//注意第2个参数是截取的长度而不是结束的下标
s.substr(s,len);

六、文件操作

七、函数

八、结构体

九、模拟

十、高精度

十一、排序

十二、暴力枚举

十三、递推与递归

十四、贪心

十五、二分

十六、搜索

十七、线性表

1.vector

义:vector vector_name;

  如:vector v;

v.empty()   返回bool型,可以用来判断vector是否为空

v.pop_back()  可以将最尾端的元素删除

v[i]  类似于数组

v.push_back(a);/ios::sync_with_stdio(false);/vector/P3156 【深基15.例1】询问学号_ppololcsz的博客-CSDN博客https://blog.csdn.net/weixin_60178940/article/details/123537263vector< vector<> >/vector<int>v(N,i) /v.size()/v.resize(n,m)/vector<int >::iterator /v.begin/v.end()_ppololcsz的博客-CSDN博客https://blog.csdn.net/weixin_60178940/article/details/1235381562.栈

3.队列

4.列表

十八、二叉树

十九、集合

二十、图

二十一、位运算与进制转换

二十二、计数原理与排列组合

二十三、整除理论

你可能感兴趣的:(笔记,c++,算法)