假期集训笔记(ing)

toupper函数

1.头文件包含

#include <ctype.h>

2.功能

把大写字母换小写字母,把小写字母换大写字母

3. 演示

int toupper(int c);
#include <stdio.h>

int main()
{
  printf("toupper('-')=%c\n",toupper('-'));
  printf("toupper('0')=%c\n",toupper('0'));
  printf("toupper('a')=%c\n",toupper('a'));
  printf("toupper('A')=%c\n",toupper('A'));
}

islower函数

1.头文件

#include <ctype.h>

2.功能

判断参数c是否为小写字母

3.演示

#include <stdio.h>

int main()
{
  printf("islower('-')=%d\n",islower('-'));
  printf("islower('0')=%d\n",islower('0'));
  printf("islower('a')=%d\n",islower('a'));
  printf("islower('A')=%d\n",islower('A'));
}

isalpa函数

1.头文件包含

#include <ctype.h>

2.功能

测试字符是否为英文字母

3.演示

int isalpha(int c)

切蛋糕公式

( x 3 + 5 x + 6 ) 6 \frac{(x^3+5x+6)}{6} 6(x3+5x+6)

gcd模板

int gcd(int m, int n)
{
	if (m % n == 0)
		return n;
	else
		return gcd(n, m % n);
}

过大数做法

组合计算公式:C(n,m)=[n*(n-1).(n-m+1)]/m!=[n(n-1).(n-m+1)](n-m)!/m!*(n-m)!=n!/[(n-m)!*m!]

其中C(n,m)=n!/(n-m)!*m!是众所周知的数学公式,然而用于程序计算并不十分有效。

原始的公式C(n,m)=[n*(n-1)*.(n-m+1)]/m!,用于程序计算是十分有效的。

21!为负数

程序说明

一边做乘法,一边做除法,是一个不错的主意,可以避免结果增大的过快而产生溢出,用同类型变量可以算更大的n和m。

乘法是先乘以大的数,除法是先除以小的数,仔细观察推导可以发现,除法总是能够整除的。这是因为,2个连续的整数必有一个是偶数即必有一个数是2的倍数,3个连续的整数必有一个数是3的倍数,等等。考虑m个连续的整数,用m做模除,其中一个的余数必然是0(鸽巢原理),即必有1个整数能被m整除。

编写的函数c()可以用于n和m比较小的情况,该函数具有通用性,计算速度也比较快。

程序不够优化,重新改写了C++语言程序。改写了函数c(),循环的每一步做了简化速度会更快一些。函数中,乘法改为从小到大做乘法,这样做可以计算的n和m范围有可能更大一些。

stl

queue

#include<queue>
queue<t>a;//申明


priority_queue<int>pq;//优先队列
int main()
{
	int n;
	while(cin>>n)
	{
		a.push(n);
	
	}
	while(!a.empty())
	{
		cout<<a.front()<<endl;
		a.pop();
	}
    //后入后出
    //队列
    
    
    
    priority_queue<int>pq;//优先队列
    //从大到小排列
    priority_queue<int,vector<int>,greater<int>>spq//从小到大排序
    int n;
    while(cin>>n&&n)
    {
        pq.push(n);
    }
    while(!pq.empty())
    {
        cout<<pq.top()<<endl;
        pq.pop();
    }
    


}

stack

#include<stack>
stack<int>st1
int main()
{
    int n;
    while(cin>>n)
    {
		st1.push(n);//输入
    }
    while(st1.empty())
    {
        cout<<st1.top()<<endl;//访问栈顶
        st1.pop();
    }
    //后入先出
    st1.size();
    
    
    
    return 0;
}

vector

#include<vector>

vector<int>vt;


int main()
{
    int n;
    while(cin>>n&&n)
    {
        vt.push_back(n);
    }
    
    int len=vt.size();
    for(int i=0;i<len;i++)
    {
        cout<vt[i]<<endl;
    }
    
    //stl 左闭右开[  )
    
    //vector<int>::iterator it  ==auto
    for(auto it=vt.begin();it!=end();++it)
    {
        cout<<*it<<endl;
    }
    
    
    vt.capacity();  //还有多少空位,倍增算法
    //vector<int>::reverse_iterator
    for(auto it=vt.rbegin();it!=rend();++it)
    {
        cout<<*it<<endl;
    }//反向输出
    
    vt.clear;//清空
    meset( 数组名,数组名+x ,cmp );
    memset(vt,0,vt+x);
    
    
}

set

#include<set>


int main()
{
    set<int>st;
    //没有重复元素
    //有序
    int n;
    while(cin>>n&&n)
    {
        st.insert(n);
    }
    set<int>::iterator it;
    for(it=st.begin();it!=st.end();++it)
    {
        cout<<*it<<endl;
    }
}



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值