重拾算法竞赛之路 day#2 (“纯新手”的入门经历)(一些入门题目的题解代码)

重拾算法竞赛之路 day#2(C++)


看这标题为什么是从第二天开始,是因为从昨天开始刷的题。

写在开头

从高中的noip水了俩年,每年都混个省三开始。现在到了大学,却发现这个学校没有去参加各大算法竞赛的方向,但还是心心念念着打比赛。在经过大一上个学期的断断续续捡起高中的基础来,才发现自己脑海里一直没有个基础的架构来支撑起一个体系,以至于到现在学到面向对象编程时,我还在继续啃着就这参加中学比赛基础的老本。因为疫情的缘故,可能这个学期都无法开学了,所以有大把的时间待在家里捣鼓些东西(当然还有数不清的网课作业)。

计划

今年的计划有三大点(指专业方面)。

  • 一是完成阅读并刷完几本算法书的题,和几大题库网站的题,实现从基础到达到csp提高组水平(没错,经过俩年的noip我还是普及组水平,只能怪自己懒了,虽说也有一些中学教育的因素在里面)。然后争取通过今年下半年的的csp认证考试的230分。(虽然现在还没有研究…)
  • 二是跟上面对对象编程C++学习的节奏,完成几个Qt的小项目。
  • 三是通过今年的软件设计师考试,估计上半年的考试会被取消惹。

今天完成的事情

昨天跟今天先是把牛客网上的基础87道题过了一遍。记录了一些基础的知识。
下面整理一下收获:

基础知识
  • 常用库函数
    cmath

ceil向上取整
floor向下取整
sqrt 平方根

isalpha 是否为字母
isdigit 是否为数字

  • 变量的命名
    时 hour
    分 minute
    时钟 clock
    梯形 trapezoid
    面积 area
    digit 数码 位
    Fahrenheit 华氏
    Celsius 摄氏
    lattice 格子

  • 常用数据范围
    char 2^7
    unsigned char 0-2^8
    short int 2^15
    int 2^31 < 10^11
    float 7位有效位
    double 15位有效位
    long 2^31< 10^11
    long long 263<1020

下面是代码
  • 头文件
#include<iostream>
#include<cstdio>
#include<vector>
#include<cmath>
using namespace std;
  • 时间的简单计算
int clock(int hour1,int hour2,int minute1,int minute2){
	return (hour2-hour1)*60 + minute2 - minute1;
}//时钟 
  • 求梯形面积
double trapezoid(int up,int down,int height){
	double area;
	area = (double)(up + down) * height / 2;
	return area;
}//梯形面积 
  • 长方体表面积与体积
void cuboid(int length,int width,int height){
	int surfaceArea,volume;
	volume = length*width*height;
	surfaceArea = (length*width)*2+(width*height)*2+(length*height)*2;
	cout<<surfaceArea<<endl<<volume;
}//长方体表面积与体积 
  • 反转整数
int reverse(int x,int digit){
	int ans = 0;
	while(digit > 0){
		ans *=10;
		ans += x % 10;
		x /= 10;
		digit--;
	}
	return ans;
}//反转整数
  • 三位小数平均数
double average(int a,int b,int c){
	return (double)(a+b+c)/3;
}//三位小数平均数 
  • 温度单位转换
double changeTem(double f){
	double c;
	c=(f-32)*5/9;
	return c;
}//温度单位转换
  • 内存计算
long long ram(int n){
	return n*1024*1024/4;
}//内存计算
  • 润年
bool runnian(int n){
	if((n%4==0&&n%100!=0)||(n%400==0)) return 1;
	else return 0;
}//润年
  • 更相减损术
int  gengxiang(int a,int b){
	int c;
	while(a!=b){
		c = abs(a-b);
		a=b;
		b=c;
	}
	return a;
}//更相减损术 
  • 回文数
void huiwen(int n){
	for(int i = 1;i<=n;i++){
		int cnt = 0,x=i;
		while(x>0){
			cnt*=10;
			cnt+=x%10;
			x/=10;
		}
		if(cnt == i) cout<<i<<endl;
	}
}//回文数 
  • 约数之和
int divisor(int n){
	int ans = 0;
	for(int i = 1;i<=n;i++){
		if(n%i==0){
			ans+=i;
		}
	}
	return ans;
}//约数之和
  • 阶乘之和
int factorial(int n){
	int now = 1,sum = 0;
	for(int i = 1;i <= n;i++){
		now = now*i;
		sum += now;
	}
	return sum;
}//阶乘之和 
  • 约瑟夫环问题
int JosephusProblem(int n,int m){
	if(n == 1) return 0;
	return (JosephusProblem(n - 1 , m) + m) % n;
}//约瑟夫环问题 
  • 回型矩阵
void returnMatrix(int n){
	int x,count = 0,a[25][25],i=0,j=1;
	for(int i = 1;i <= n;i++){
	for(int j = 1;j <= n;j++){
			a[i][j] = 0;
		}
	}
	for(int i = 0;i<=n+1;i++) {
		a[i][0]=1;
		a[0][i]=1;
		a[i][n+1]=1;
		a[n+1][i]=1;
	}
	while(count<n*n){
		while(!a[j][i+1]) {
		a[j][++i] = ++count;
		}
		while(!a[j+1][i]){
		a[++j][i] = ++count;
		}
		while(!a[j][i-1] ) {
		a[j][--i] = ++count;
		}
		while(!a[j-1][i]){
		a[--j][i] = ++count;
		}
	}
	for(int i = 1;i <=n;i++){
		for(int j = 1;j <=n;j++){
			cout<<a[i][j]<<" ";
		}
		cout<<endl;
	}
}//回型矩阵
  • 蛇形矩阵
void shexin(int n){
	int count = 0;
	for(int i = 0;i<=n+1;i++){
		a[i][0] = 1; a[0][i] = 1;
		a[i][n+1] = 1; a[n+1][i] = 1;
	}
	for(int i = 1;i<=n;i++){
		for(int j = 1;j<=n;j++)
		a[i][j] = 0;
	}
	int i = 1,j = 1;
	a[i][j] = ++count;
	int cc=0;
	while(count < n*n && cc<1000){
		cc++;
		if(!a[i][j+1])a[i][++j] = ++count;
		else if(!a[i-1][j])a[--i][j] = ++count;
		else a[++i][j] = ++count;
		while(!a[i+1][j-1]) a[++i][--j] = ++count;
		if(!a[i+1][j])a[++i][j] = ++count;
		else a[i][++j] = ++count;
		while(!a[i-1][j+1]) a[--i][++j] = ++count;
	}
	for(int i = 1;i<=n;i++){
		for(int j = 1;j<=n;j++){
			cout<<a[i][j]<<" ";
		}
		cout<<endl;
	}
} //蛇形矩阵 
  • 主函数
int main(){

    return 0;
}

猜你喜欢

转载自blog.csdn.net/wdshhh/article/details/105802885