看这标题为什么是从第二天开始,是因为从昨天开始刷的题。
写在开头
从高中的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;
}