小技巧(日后遇见进行补充)。。。

2024-04-23 20:58

本文主要是介绍小技巧(日后遇见进行补充)。。。,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1.对浮点型数据取整:有四舍五入取整,向上取整,和向下取整。代码:用函数需要 cmath 头文件,数据取整在一些数据处理时会有很多的用处。

#include<iostream>
#include<cmath>
using namespace std;
int main()
{double a=2.1;cout<<ceil(a)<<endl;  //向上取整 cout<<floor(a)<<endl;   //向下取整 cout<<round(a)<<endl;  //四舍五入 return 0;
}

2.素数打表技巧:

素数这个很头疼的问题,通常我们 需要打表解决问题。fun函数进行打表,vis 数组下标就是快速判断素数,Prime 数组内部数据就是一个一个的素数,可以快速应用。

#include<iostream>
#include<cmath>
#include<string.h>
using namespace std;
const int maxn=1000005;bool vis[maxn];	 
int Prime[maxn]; 
int cnt;
int n;
void fun()
{cnt = 0;memset(vis,true,sizeof(vis));vis[0] = vis[1] = false;	vis[2] = true;for(int i = 2 ; i<=maxn; i++){if(vis[i]){Prime[cnt++] = i;for(int j = i+i ; j<=maxn; j+=i){vis[j] = false;}}}
}int main()
{fun();return 0;
}

3.年月日模板 月份天数模板:也不能叫板子(自己瞎搞)吧,就是处理起来比较方便而已。


int a[]={0,31,31+29,31+29+31,31+29+31+30,31+29+31+30+31,31+29+31+30+31+30,31+29+31+30+31+30+31,31+29+31+30+31+30+31+31,31+29+31+30+31+30+31+31+30,31+29+31+30+31+30+31+31+30+31,31+29+31+30+31+30+31+31+30+31+30,31+29+31+30+31+30+31+31+30+31+30+31};

4. 大数据年份之间的闰年数量(求解2月29日在两年份之间一共有多少个),如果我们一个年份一个年份遍历,肯定会超时(肯定是不用说的),这就需要我们了解快速求解闰年 数量 的数学方法:

计算到某年为止的闰年数,其实很简单.设要计算的年为A,则到A年为止(含A年)的闰年数为:

闰年数=int(year)/4-int(year)/100+(int)year/400;    这个是到year 年一共的闰年数量,注意注意注意:末尾年year 也是算进去的。有了这个公式,就可以很快计算出到某个年是的闰年数量了。下面看一道题目:

February 29

HihoCoder - 1148

这道题目就是找出2个年数之间的所有的闰年数量,就是用上面这个公式,先算出由起始开始 到A年的闰年数量,然后再算到B年闰年数量,然后再减一下。就是答案。

 

 5.最大公约数GCD 函数递归求法:

int gcd(int x,int y)
{return  y==0?x:gcd(y,x%y);        
}

一行代码搞定求解最大公约数

6.判断是否回文数的求法:

        int num;cin>>num;int c=num;int sum1=0;while(c){sum1=sum1*10+c%10;c=c/10;}if(sum1==num)cout<<"是回文数"<<endl;

7.vector<int>mp  中搜索第一次出现的数据 ,用 find 函数来查

8.用栈来模拟计算器的实现,看一下题目:巧用stack 和 getchar( ),一个用来存储数据,一个用来判断结束,比如说换行和输入0来结束程序的运行。  

读入一个只包含 +, -, *, / 的非负整数计算表达式,计算该表达式的值。

Input

测试输入包含若干测试用例,每个测试用例占一行,每行不超过200个字符,整数和运算符之间用一个空格分隔。没有非法表达式。当一行中只有0时输入结束,相应的结果不要输出。

Output

对每个测试用例输出1行,即该表达式的值,精确到小数点后2位。

Sample Input

1 + 2
4 + 2 * 5 - 7 / 11
0

Sample Output

3.00
13.36

 还有输入的问题,这是一个中缀表达式的题目,一开始完全没有思路,怎么来判断乘法和加法的优先级呢?难道不断的循环,一直到最后一个数吗?(我想,好麻烦啊,我也不会啊),看了看网上的代码 ,有的很长,有的用的stack 来模拟加法,巧用了getchar ,因为是不定长数据输入,(一开始想用 getline,来实现,但是也是不好实现 ),所以就用getchar 有没有读取换行符 来实现本次输入的结束标志(学到了)。

代码:
 

#include<iostream>
#include<algorithm>
#include<cstdio>
#include<string.h>
#include<vector>
#include<stack>typedef long long ll;
using namespace std;
const int maxn=1e6+7;
const ll inf=(1<<30);
typedef pair<int,int> p;int main()
{double n;while(scanf("%lf",&n)!=EOF){stack<double>s;s.push(n);	char h=getchar();if(s.top()==0&&h=='\n')break;char a;double b;while(scanf("%c %lf",&a,&b)!=EOF){if(a=='+')s.push(b);else if(a=='-')s.push(-b);else if(a=='*'){double temp=s.top();s.pop();s.push(temp*b);}else{double temp=s.top();s.pop();s.push(temp/b);}		a=getchar();if(a=='\n')break;	}double sum=0;while(!s.empty()){sum+=s.top();s.pop();}printf("%.2lf\n",sum);}return 0;
}

用到getchar( ),需要提前将一些其他没有用的字符提前吸收掉(有的题目会有要求限制,比如空格,在输入前,和再一次循环后,也要吸收一下,要注意)。
9.有些问题用c++ 的 STL 处理起来 就很容易,就像很多的容器vector set queue ,一些基础的C++容器 用法就不说了,基本上都是会用的 ,下面我只是记一下不常用的用法(大佬自动忽略 ,小弟好记性不如烂键盘(好贵的) ):

 vector ,这个两个 vector 合并到一个vector 中的操作,我遇到过一次,也是很强大的用法          

int main()
{std::ios::sync_with_stdio(false);vector<int>s1,s2;s1.push_back(6);s1.push_back(1);s1.push_back(9);s2.push_back(2);s2.push_back(1);s2.push_back(5);//s1 输出 for(int i=0;i<s1.size();i++){cout<<s1[i]<<' ';}cout<<endl;//s2 输出 for(int i=0;i<s2.size();i++){cout<<s2[i]<<' ';}cout<<endl;/*如果将s1 变为 s2 ,丢掉s1 原来的数据   方法 1.s1=s2;2.s1.assign(s2.begin(),s2.end());	当然还是 第一种简单  *///将 s2 中的元素都放到了 s1中,不会丢掉原来  s1.insert(s1.end(),s2.begin(),s2.end());for(int i=0;i<s1.size();i++){cout<<s1[i]<<' ';}cout<<endl;return 0;	
}

10.使用数组和结构体来模拟链表实现连起来的操作,比如在一个结构体中,下标来表示当前地址,里面的元素一个是当前数据,和下一个的地址。这样就可以简单的模拟一下链表的实现,地址和下一个地址都被存储起来,(确实很妙的简单模拟链表)  

11.对于一些求后几位的题目,直接每项取余就可以了,要不然数据直接爆炸(long long都会爆的,我怎么那么傻,记得当时跑数据的时候,没有爆啊,也没有出现什么负的数据 ,等异常的现象,看来是当时敲错了,看来做填空题还是要细心的,后头也要检查一遍,哎,可惜)。就是下面这个,可惜,可惜啊。

#include<iostream>
#include<stdio.h>
#include<string>
#include<vector>
#include<algorithm>
#include<string.h>
const int maxn=1005;
typedef long long ll;
using namespace std;
const int inf=1e8;
int a[30000000];
int main()
{  a[1]=1;a[2]=1;a[3]=1;for(int i=4;i<=20190324;i++)a[i]=(a[i-1]+a[i-2]+a[i-3])%10000;cout<<a[20190324]<<endl;return 0;
}

    还有一个非常重要的事情就是,不管在hdu 和poj 里面,一定不能将 strlen(字符数组) 放在 for循环当中,都会超时的,已经深受其害了,以后做题,一定不能将strlen( )函数放在for 循环当中,会导致超时,所以一定不要,一定不要,一定不要。

 

memset() 初始化数组只能初始化为0,不能初始化为其他的指定数值,如果需要的话,用循环来赋值,或者使用  fill来初始化 ****,这个很重要,能WA到死。

对于一个数组来说,我们按照sort来自定义排序,我们还要自己写一个cmp函数,现在我们可以直接写出一个语句,直接表达出相同的意思,就是下面这个代码:


#include<iostream>
#include<algorithm>
using namespace std;
#include<map>
#include<string>
#include<sstream>
typedef long long ll;
typedef pair<char, int> p;
const int maxn = 100005;int main()
{int a[10]={1,5,9,4,5,2,6,9,7,9};sort(a,a+10,greater<int>());for(int i=0;i<10;i++)cout<<a[i]<<' ';cout<<endl;	sort(a,a+10,less<int>());for(int i=0;i<10;i++)cout<<a[i]<<' ';	return 0;
}

 

这篇关于小技巧(日后遇见进行补充)。。。的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/929866

相关文章

Java字符串操作技巧之语法、示例与应用场景分析

《Java字符串操作技巧之语法、示例与应用场景分析》在Java算法题和日常开发中,字符串处理是必备的核心技能,本文全面梳理Java中字符串的常用操作语法,结合代码示例、应用场景和避坑指南,可快速掌握字... 目录引言1. 基础操作1.1 创建字符串1.2 获取长度1.3 访问字符2. 字符串处理2.1 子字

Java Optional的使用技巧与最佳实践

《JavaOptional的使用技巧与最佳实践》在Java中,Optional是用于优雅处理null的容器类,其核心目标是显式提醒开发者处理空值场景,避免NullPointerExce... 目录一、Optional 的核心用途二、使用技巧与最佳实践三、常见误区与反模式四、替代方案与扩展五、总结在 Java

QT进行CSV文件初始化与读写操作

《QT进行CSV文件初始化与读写操作》这篇文章主要为大家详细介绍了在QT环境中如何进行CSV文件的初始化、写入和读取操作,本文为大家整理了相关的操作的多种方法,希望对大家有所帮助... 目录前言一、CSV文件初始化二、CSV写入三、CSV读取四、QT 逐行读取csv文件五、Qt如何将数据保存成CSV文件前言

通过Spring层面进行事务回滚的实现

《通过Spring层面进行事务回滚的实现》本文主要介绍了通过Spring层面进行事务回滚的实现,包括声明式事务和编程式事务,具有一定的参考价值,感兴趣的可以了解一下... 目录声明式事务回滚:1. 基础注解配置2. 指定回滚异常类型3. ​不回滚特殊场景编程式事务回滚:1. ​使用 TransactionT

Java中使用Hutool进行AES加密解密的方法举例

《Java中使用Hutool进行AES加密解密的方法举例》AES是一种对称加密,所谓对称加密就是加密与解密使用的秘钥是一个,下面:本文主要介绍Java中使用Hutool进行AES加密解密的相关资料... 目录前言一、Hutool简介与引入1.1 Hutool简介1.2 引入Hutool二、AES加密解密基础

SpringSecurity6.0 如何通过JWTtoken进行认证授权

《SpringSecurity6.0如何通过JWTtoken进行认证授权》:本文主要介绍SpringSecurity6.0通过JWTtoken进行认证授权的过程,本文给大家介绍的非常详细,感兴趣... 目录项目依赖认证UserDetailService生成JWT token权限控制小结之前写过一个文章,从S

Python通过模块化开发优化代码的技巧分享

《Python通过模块化开发优化代码的技巧分享》模块化开发就是把代码拆成一个个“零件”,该封装封装,该拆分拆分,下面小编就来和大家简单聊聊python如何用模块化开发进行代码优化吧... 目录什么是模块化开发如何拆分代码改进版:拆分成模块让模块更强大:使用 __init__.py你一定会遇到的问题模www.

使用Jackson进行JSON生成与解析的新手指南

《使用Jackson进行JSON生成与解析的新手指南》这篇文章主要为大家详细介绍了如何使用Jackson进行JSON生成与解析处理,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1. 核心依赖2. 基础用法2.1 对象转 jsON(序列化)2.2 JSON 转对象(反序列化)3.

C#使用SQLite进行大数据量高效处理的代码示例

《C#使用SQLite进行大数据量高效处理的代码示例》在软件开发中,高效处理大数据量是一个常见且具有挑战性的任务,SQLite因其零配置、嵌入式、跨平台的特性,成为许多开发者的首选数据库,本文将深入探... 目录前言准备工作数据实体核心技术批量插入:从乌龟到猎豹的蜕变分页查询:加载百万数据异步处理:拒绝界面

Python使用自带的base64库进行base64编码和解码

《Python使用自带的base64库进行base64编码和解码》在Python中,处理数据的编码和解码是数据传输和存储中非常普遍的需求,其中,Base64是一种常用的编码方案,本文我将详细介绍如何使... 目录引言使用python的base64库进行编码和解码编码函数解码函数Base64编码的应用场景注意