得到的奇技淫巧

1.read()快读函数

 1 //适用于正整数
 2 template 
 3 inline void read(T &ret) {
 4     char c; ret=0;
 5     while((c=getchar())'9');
 6     while(c>='0'&&c<='9') ret=ret*10+(c-'0'),c=getchar();
 7 }
 8 ////
 9 //适用于正负整数
10 template 
11 inline bool scan_d(T &ret) {
12    char c; int sgn;
13    if(c=getchar(),c==EOF) return 0; //EOF
14    while(c!='-'&&(c'9')) c=getchar();
15    sgn=(c=='-')?-1:1;
16    ret=(c=='-')?0:(c-'0');
17    while(c=getchar(),c>='0'&&c<='9') ret=ret*10+(c-'0');
18    ret*=sgn;
19    return 1;
20 }
21 ////
22 //适用于正负数,(int,long long,float,double)
23 template 
24 bool scan_d(T &ret){
25     char c; int sgn; T bit=0.1;
26     if(c=getchar(),c==EOF) return 0;
27     while(c!='-'&&c!='.'&&(c'9')) c=getchar();
28     sgn=(c=='-')?-1:1;
29     ret=(c=='-')?0:(c-'0');
30     while(c=getchar(),c>='0'&&c<='9') ret=ret*10+(c-'0');
31     if(c==' '||c=='\n'){ ret*=sgn; return 1; }
32     while(c=getchar(),c>='0'&&c<='9') ret+=(c-'0')*bit,bit/=10;
33     ret*=sgn;
34     return 1;
35 }
read

2.快写函

1 //适用于正int
2 inline void out(int a)  
3 {  
4     if(a>=10)out(a/10);  
5     putchar(a%10+'0');  
6 }  

3.蔡勒公式(根据年月日求星期)

 1 int ReturnWeekDay( unsigned int iYear, unsigned int iMonth, unsigned int iDay )
 2 {
 3     int iWeek = 0;
 4     unsigned int y = 0, c = 0, m = 0, d = 0;
 5     if ( iMonth == 1 || iMonth == 2 )
 6     {
 7         c = ( iYear - 1 ) / 100;
 8         y = ( iYear - 1 ) % 100;
 9         m = iMonth + 12;
10         d = iDay;
11     }
12     else
13     {
14         c = iYear / 100;
15         y = iYear % 100;
16         m = iMonth;
17         d = iDay;
18     }
19     iWeek = y + y / 4 + c / 4 - 2 * c + 26 * ( m + 1 ) / 10 + d - 1;    //蔡勒公式
20     iWeek = iWeek >= 0 ? ( iWeek % 7 ) : ( iWeek % 7 + 7 );    //iWeek为负时取模
21     if ( iWeek == 0 )    //星期日不作为一周的第一天
22     {
23         iWeek = 7;
24     }
25     return iWeek;
26 }
蔡勒公式

4.全排列函数(关于全排列的具体实现同sort()快排函数一样希望可以自己独立码出)

next_permutation(start,end)和prev_permutation(start,end)

这两个函数区别在于前者求的是当前排列的下一个排列,而后者求的是当前排列的上一个排列
这里的“前一个”和“后一个”,我们可以把它理解为序列的字典序的前后
严格来讲,就是对于当前序列pn,他的下一个序列pn+1满足:不存在另外的序列pm,使pn<pm<pn+1.

对于next_permutation函数,其函数原型为:

 #include 
 bool next_permutation(iterator start,iterator end)

当目前序列不存在下一个排列时,函数返回false,否则返回true

栗子:

 

1 int main()
2 {
3     int num[3]={1,2,3};
4     do
5     {
6         cout<<num[0]<<" "<<num[1]<<" "<<num[2]<<endl;
7     }while(next_permutation(num,num+3));
8     return 0;
9 }
全排列

 

此可以看出
next_permutation(num,num+n)函数是对数组num中的前n个元素进行全排列,同时并改变num数组的值

另::prex_permutation()应对的情况为{3,2,1}之类降序。

5.求字符串所有子串

1 void sub(string str) {
2     for (int i = 0; i < str.size(); i++)
3         for (int j = 1; j <= ((str.substr(i)).size()); j++)
4             cout << str.substr(i, j) << endl;
5 }

现在才仔细看原来是用了字符串类的方法。。。看样子这个类我了解的还是太少了?

转载于:https://www.cnblogs.com/xzmxiao/p/11373209.html

Python作为一种高级编程语言,有许多巧妙的设计和特性,被誉为“一种你会喜欢上的语言”(There's a lot you can do with just a few lines of code)。以下是几个Python的独特之处和一些常见的奇技淫巧: 1. **列表推导式 (List Comprehension)**:这是一种简洁的方式来创建新的列表,通常用于数据转换或过滤。例如 `new_list = [x * x for x in range(5)]` 创建了一个包含0到4的平方数的新列表。 2. **生成器 (Generators)**:生成器是惰性求值的序列,它们按需计算值,节省内存。比如 `gen = (x*x for x in range(10))` 可以逐个生成0到9的平方。 3. **装饰器 (Decorators)**:Python允许在运行时修改函数或类的行为,通过定义接收其他函数作为输入并返回新函数的函数,如 `@staticmethod` 和 `@classmethod`。 4. **鸭子类型 (Duck Typing)**:Python并不关心类型的严格匹配,只要对象有需要的方法就认为它是可以的,这使得代码更具灵活性。 5. **元组解包 (Tuple Unpacking)**:可以用变量名直接接收元组或列表的元素,如 `(a, b) = ('Hello', 'World')`。 6. **魔法方法 (Magic Methods)**:特殊的双下划线开头和结尾的方法(如 `__init__`、`__str__`),用于实现自定义操作,如实例化、比较和显示。 7. **异常处理 (Exception Handling)**:Python的try-except-finally结构可以优雅地处理错误,提供了一种控制程序流程的方式。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值