注意:scanf是不会自动过滤掉空格和回车的\n的。
浮点数保留位数时用scanf和printf,保留五位可以写成%.5lf。
$double$可以看成非常大,$10^{300}$左右;$int$大概$10^9$;所以结果会把$int$变量自动转换成$double$变量。
开方时用sqrt()函数。注意平方不能用^,必须写两遍。
求两数的最大值,公式:$\max(a,b)=\frac{(a+b+abs(a-b))}{2}$
有三个整数$a,b,c$
从而得到$a<=b<=c$
如何交换两个数?
如果要输入的数很多的话,可以用循环来输入:
for(inti=0;i<6;i++){doublex;cin>>x;}12.swap函数用法当不确定$x$,$y$的顺序,又需要将小的先出现,可以写成这样:if(x>y)swap(x,y);
在100个数中找出最大值,代码模板:
#include #include 例:对于$12$来说,$2$是$12$的约数,$6$也是$12$的约数;又$3$是$12$的约数,$4$也是$12$的约数;所以我们只要枚举较小的那个约数即可。 $d\le\frac{x}{d}$ $d^{2}\lex$ $d\le\sqrt{x}$ 曼哈顿距离:横坐标的差的绝对值和纵坐标的差的绝对值的和。 $(x1,y1)、(x2,y2)$ 曼哈顿距离=$|x1-x2|+|y1-y2|$ 字符串用cin读会去掉多余空格 #include /*开一个数组,存储a到z的出现次数'a''b''c''d'...'z'0123...25*/#include for(inti=0;str[i];i++)经典题:密码翻译,输入一个只包含小写字母的字符串,将其中的每个字母替换成它的后继字母,如果原字母是’z’,则替换成’a’。 for(char&c:s)if(c>='a'&&c<='z')c=(c-'a'+1)%26+'a';elseif(c>='A'&&c<='Z')c=(c-'A'+1)%26+'A';难题:字符串模拟题 设猎人为0狗熊为1枪为21赢02赢10赢2xyif(x==y)Tieif(x=(y+1)%3)Player1赢elsePlayer2赢30.substr(pos,count)的用法substr(pos,count)函数:pos-要包含的首个字符的位置count-子串的长度返回含子串[pos,pos+count)的string举例:左旋转字符串:输入:”abcdefg”,n=2输出:”cdefgab” 用fgets()输入字符数组: //用fgets()输入字符数组chara[100],b[100];//去掉末尾回车fgets(a,100,stdin);fgets(b,100,stdin);intx=strlen(a),y=strlen(b);if(a[x-1]=='\n')a[x-1]=0;if(b[y-1]=='\n')b[y-1]=0;用cin.getline()输入字符数组: sstream头文件定义了三个类型来支持内存IO,这些类型可以向string写入数据,从string读取数据,就像string是一个IO流一样。 字符串数组有别于字符数组,定义字符串数组stringstr[100];可以先用while(cin>>str[n])读入,统计n倒排单词可以倒序排,输出str[i]<<'' /*要存的数:1.每个位置填的是哪些数?nums[]2.每个数组有没有被用过st[]3.u可以枚举到第几位?u*/#include /*输入:[1,2,3]输出:[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]]*/classSolution{public:vector #include 方法:先让该节点伪装成其next节点6变成8,再把next节点干掉(真正的8被干掉) /***Definitionforsingly-linkedlist.*structListNode{*intval;*ListNode*next;*ListNode(intx):val(x),next(NULL){}*};*/classSolution{public:ListNode*deleteDuplication(ListNode*head){autodummy=newListNode(-1);dummy->next=head;autop=dummy;while(p->next){autoq=p->next;while(q->next&&q->next->val==p->next->val)q=q->next;if(q==p->next)p=q;elsep->next=q->next;}returndummy->next;}};第八章C++STL01#include #include#include