热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

胡扯一点代码实现小技巧啦啦啦~x

一.一就是用来乱扯的?#include<bitsstdc++.h>万能头文件#definefr(i,a,b)for(intia,_end_b;i<_en

一.

  一就是用来乱扯的...?

#include 
//万能头文件

#define fr(i,a,b) for(int i=a,_end_=b;i<=_end_;i++)
#define fd(i,a,b) for(int i=a,_end_=b;i>=_end_;i--)
#define frei(s) freopen(s,"r",stdin)
#define freo(s) freopen(s,"w",stdout)
#define ll long long
#define u unsigned
#define ssr(q) scanf("%d",&q);
#define sr(q) printf("%d",q);
#define Q int
//...可以随便搞

using namespace std;

#define rt return
#define inf 0x3f3f3f3f
#define infll 4557430888798830399ll
#define pc(x) putchar(x)
#define spc putchar(' ')
#define gc getchar()
#define ln pc('\n')
#define writeint(x) printf("%d",x)
#define lowbit(x) (x&(-x))
//如果用的多的话可以 省时省力!

int main()
{
Q w;
ssr(w);
sr(w);
//以下不一一列举
//...
rt 0;
}

+

for(int t=m; t; t--) a[++n] = b[t];
// 循环中间的 t:非零即真,遇到 t=0 才停下
int ans(0); // 效果等价于 ans=0

+

编表的num从0开始++,跟从1开始++的区别
如果从0开始编号,在往上反的过程中会用到0(因为0的编号是0(为假)嘛),所以要将head数组手动设置为
-1才能进入0号元素那条边,如果不设置为-1,只能用1往后的边
所以
(Ps:now初始值为0)
void add(int pre,int to)
{
h[now].to
=to;
h[now].next
=heads[pre];
heads[pre]
=now++;
/*
前提是heads数组已经设置为-1,并且在使用的时候
for(int j=heads[i];j!=-1;j=h[j].next)
或者
//for(int j=heads[i];~j;j=h[j].next)
~表示取反.
*/
}
而如果这样的话
void add(int pre,int to)
{
h[
++now].to=to;
h[now].next
=heads[pre];
heads[pre]
=now;
/*
从一开始编号的话,到0就停止,所以不需要手动设置为-1
*/
}
(额...学姐说的
%%%)

+

///优读
inline int reads(){
int x=0,f=1;
char ch=getchar();

while(ch>'9' || ch<'0')
{
if(ch=='-') f=-1;
ch
=getchar();
}

while(ch>='0' && ch<='9')
{
x
=x*10+ch-'0';
ch
=getchar();
}

return x*f;
}

 

二.

  开数组的时候我们都喜欢从1号开始使用,而把0号元素冷落了

但是开了就是开了,0号闲着也是闲着,不如把它合理的利用起来!

所以,可以用a[0]来计数,

a[0]++,a[0]--什么的,

回收利用我最强!2333

三.

读字符(串)的各种方式,老是出错的你中枪了吗???

列出几种空白符:换页符、纵向制表符、横向制表符('\t')、空格(' ')、换行符('\n')、回车符('\r')

char ch;
char str[11];

1.getline()读入
    读入整行数据,它使用回车键输入的换行符来确定输入结尾.
    调用方法: 

      首先说明getline()的原型:getline (istream &is,string &str,char delim)

      istream &is表示一个输入流,譬如cin.

      string表示把从输入流读入的字符串存放在这个字符串中(&str其实就是一个变量)

      char delim是终止符(默认为回车,还可以是别的符号,如#,*之类的都可以)

      而对于while(getline(cin,str))来讲,while语句的真实判断对象是cin,也就是当前是否存在有效的输入流,如果存在就不会结束循环

 getline(cin,str, '\n');

 

2.scanf读入:

    scanf函数不检测读入的字符的个数,仅仅是不断的从标准输入流(键盘)中读入字符,直到遇到“空白符”.scanf从输入流中取出“空白符”.

    1)读入单个字符时读入换行符空格什么的

      使用scanf("%c", &ch); 读取ch (ch是char类型),如果读取之前有换行符或者空格,那么ch就会把之前的换行符或者空格读取到,解决方法就是这之前先getchar()一下

    2)读取字符串时(不管字符串是char或者char[]都是可以的),并不会不会读取前边的换行符或者空格

         使用scanf("%s",str); 读取str (str是字符串类型),如果读取之前有换行符或者空格,str也不会把之前的换行符或者空格读取到,所以使用它读入字符串的时候可以大胆放心啦~

    3)读取二维char数组不能用scanf("%s", str[i][j]),但是是可以使用scanf("%s", str[i])或者scanf("%c",&str[i][j])的,相比较而言前者速度更快一些.

                                                        至于原因嘛:可能是数组名可以表示数组首地址的原因?

Eg:

    scanf("%s",str[i]+1); 
  scanf("%c",&ch);
/*
像第一行那样读入的时候就能够强制的让字符串从1号数组开始,
因为默认字符串的读入都是从0号元素开始的,
并且有一点需要说明的是:
scanf读入字符串时不能够加"&"号!
(但是在读入单个字符时是必须要加上"&"符号的!)
*/

3.cin读入:

    不读换行符

    (是用空白(空格,制表符和换行符)来定字符串的界的)

Eg:

    cin>>s; //不读入换行符什么的,我感觉最好用啾啾啾~,但是……空格也是读不进去的,这就有点……

4.fgets读入:

    读入的是带'\n'的字符串,一直进行读取直到遇到'\n',并将'\n'从输入流中取出.

    (会读入'\r'   //空白符)

    前提是(不超过第二个参数的情况下,它从第三个参数(文件指针,输入流)中不断的读入字符).

 

5.gets读入:

    读取空字符,并且还读取换行符(这真的略尴尬……).

    (还读入'\r'   //空白符)

    它的读入是不检测读入的字符的个数的.仅仅是不断的从标准输入流(键盘)中读入字符,直到遇到'\n'.

 

    与fgets不同的是,虽然gets函数也会将'\n'从输入流中取出,但却只是取出,然后将其丢掉.他是并不保存在目标字符串中的.

PS:

其中fgets函数是安全的,gets和scanf函数都是不安全的

当输入的字符大于等于11时,会数组越界.编译并不会保存,甚至运行时也不会保存.

但极可能因为对str数组越界写入,导致更改了其他变量的值!

6.字符读入getchar+字符输出putchar函数

    getchar函数是接收从键盘输入的单个字符数据,它是一个无参函数

    用法:

ch=getchar();//通常把输入的字符赋予一个字符变量,构成赋值语句
/*

1)只能接收单个字符,输入数字也按照字符来处理
2)输入多于一个时,只接收第一个
3)回车键结束
4)如果有连续两个以上,应该一次性输入所需字符,最后再按回车,否则,将进行接收回车,将其作为一个字符串给后面的getchar()函数
*/

    putchar函数是字符输出函数,输出单个字符

    用法:

putchar(ch); //ch为字符变量或常量 

如果实在看不懂的话可以出门拐角去百度一下,或者直接给你个链接? 

http://blog.csdn.net/cyuyanenen/article/details/51602922

四.

  字典序什么的

  数字的字典序是说1 <2 , 13 > 9;

  而字母的字典序是说 zzz > zzx ,即26 26 26 > 26 26 25

  依然是将他转化为数字然后进行比较

 五.

  字符串中lenth与find函数的用法

#include
#include


using namespace std;

string a;

int main() {
cin
>>a;
int x=a.length();
printf(
"%d\n",x);//会输出字符串的长度,不是从0开始记数
int y=a.find('q');
printf(
"%d\n",y);
//会输出字符串寻找‘q’这个字符的时候所遇到的第一个‘q’的地址,如果没有,返回-1
return 0;
}

 六.

  指针!

  看了一些资料,指向二维数组的指针定义方式并不是直接定义指针的指针

int   a[3][6];
int **p=a;//像这样定义是错误的

  因为a代表着除了第一列以外的列数的维数大小,如a+1的地址就是a[1]的地址,也就是a[1][0]的地址,而p仅是整形指针的指针,没跨越一次就是4字节,因此他们的大小是不匹配的,所以这样子直接等于号是不正确的。

  要真正的定义方式应概是定义指向n维数组的指针,n就是除第一维的另外维度,

  如上面的指针定义应该为

int  (*p)[6];
p
=a;

  这样子就 可以就可以通过p以下标形式来访问数组。

  接下来给出一些比较简单的代码:

#include
#include


using namespace std;

/*
指针的
相加或者相乘
*/

int main()
{
int a,b,s,t;
cin
>>a>>b;
int *p;
p
=&a;
int *q;
q
=&b;
s
=(*p)+(*q);
t
=(*p)*(*q);
printf(
"a=%d\n",*p);
printf(
"b=%d\n",*q);
printf(
"a+b=%d\n",s);
printf(
"a*b=%d\n",t);
return 0;
}

 七.

  map详解~

http://www.cnblogs.com/zxqxwnngztxx/p/6701478.html

八.

  简单位运算~

#include
#include


using namespace std;

int main()
{
int q;
cin
>>q;
int w=q<<1;//等价于q*2
int e=1<//等价于2的q次方
int r=q>>1;//等价于q/2
int t=1>>q;//等价于0
cout<" "<" "<" "<<t;
return 0;
}

 九.

  不给几组数据的各种输入方式

  倘若若干组数据分别有m个输入

  下面所提到的(*m)均指执行多少次

  1)EOF

       while(scanf("%……*m",&……*m)!=EOF);

  2)while(scanf("%……*m",&……*m)==m);

  3)while(cin>>……*m);

 十.

  break,continue,return的区别

  1)break     直接跳出当前的循环,从当前循环外面开始执行,忽略循环体中任何其他语句和循环条件测试。他只能跳出一层循环

注意:如果你的循环是嵌套循环,那么你需要按照你嵌套的层次,逐步使用break来跳出. 
    
  2)continue     也是终止当前的循环过程,但他并不跳出循环,而是继续往下判断循环条件执行语句.他只能结束循环中的一次过程,但不能终止循环继续进行.     

  3)return 语句可被用来使 正在执行分支程序返回到调用它方法。

详细的return在这里(http://www.cnblogs.com/zxqxwnngztxx/p/6758491.html)啦~

 

 

(未完待续?)


推荐阅读
  • UNP 第9章:主机名与地址转换
    本章探讨了用于在主机名和数值地址之间进行转换的函数,如gethostbyname和gethostbyaddr。此外,还介绍了getservbyname和getservbyport函数,用于在服务器名和端口号之间进行转换。 ... [详细]
  • 本文详细探讨了KMP算法中next数组的构建及其应用,重点分析了未改良和改良后的next数组在字符串匹配中的作用。通过具体实例和代码实现,帮助读者更好地理解KMP算法的核心原理。 ... [详细]
  • 题目Link题目学习link1题目学习link2题目学习link3%%%受益匪浅!-----&# ... [详细]
  • 本文介绍如何使用Objective-C结合dispatch库进行并发编程,以提高素数计数任务的效率。通过对比纯C代码与引入并发机制后的代码,展示dispatch库的强大功能。 ... [详细]
  • 题目描述:给定n个半开区间[a, b),要求使用两个互不重叠的记录器,求最多可以记录多少个区间。解决方案采用贪心算法,通过排序和遍历实现最优解。 ... [详细]
  • Splay Tree 区间操作优化
    本文详细介绍了使用Splay Tree进行区间操作的实现方法,包括插入、删除、修改、翻转和求和等操作。通过这些操作,可以高效地处理动态序列问题,并且代码实现具有一定的挑战性,有助于编程能力的提升。 ... [详细]
  • 从 .NET 转 Java 的自学之路:IO 流基础篇
    本文详细介绍了 Java 中的 IO 流,包括字节流和字符流的基本概念及其操作方式。探讨了如何处理不同类型的文件数据,并结合编码机制确保字符数据的正确读写。同时,文中还涵盖了装饰设计模式的应用,以及多种常见的 IO 操作实例。 ... [详细]
  • 本文详细探讨了VxWorks操作系统中双向链表和环形缓冲区的实现原理及使用方法,通过具体示例代码加深理解。 ... [详细]
  • 本教程涵盖OpenGL基础操作及直线光栅化技术,包括点的绘制、简单图形绘制、直线绘制以及DDA和中点画线算法。通过逐步实践,帮助读者掌握OpenGL的基本使用方法。 ... [详细]
  • 本文详细介绍如何使用Python进行配置文件的读写操作,涵盖常见的配置文件格式(如INI、JSON、TOML和YAML),并提供具体的代码示例。 ... [详细]
  • Java 类成员初始化顺序与数组创建
    本文探讨了Java中类成员的初始化顺序、静态引入、可变参数以及finalize方法的应用。通过具体的代码示例,详细解释了这些概念及其在实际编程中的使用。 ... [详细]
  • 本文介绍了Java并发库中的阻塞队列(BlockingQueue)及其典型应用场景。通过具体实例,展示了如何利用LinkedBlockingQueue实现线程间高效、安全的数据传递,并结合线程池和原子类优化性能。 ... [详细]
  • 前言--页数多了以后需要指定到某一页(只做了功能,样式没有细调)html ... [详细]
  • 本文详细介绍了Java编程语言中的核心概念和常见面试问题,包括集合类、数据结构、线程处理、Java虚拟机(JVM)、HTTP协议以及Git操作等方面的内容。通过深入分析每个主题,帮助读者更好地理解Java的关键特性和最佳实践。 ... [详细]
  • 本文探讨了 Objective-C 中的一些重要语法特性,包括 goto 语句、块(block)的使用、访问修饰符以及属性管理等。通过实例代码和详细解释,帮助开发者更好地理解和应用这些特性。 ... [详细]
author-avatar
aofeng12_313
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有