無錫網(wǎng)站建設公司排名網(wǎng)絡推廣包括哪些
目錄
1.忽略回車的字符串輸入
? ? ? ? i.getline()
? ? ? ? ii.逐個字符的識別再輸入
2.獲取絕對值abs()
3.做題時的誤區(qū)
4.多個變量的某一個到達判斷條件
? ? ? ? i.max()
5.[NOIP2016 提高組] 玩具謎題
? ? ? ? i.代碼?
6.邏輯上的圓圈
? ? ? ? i.有限個數(shù)n的數(shù)組
7.數(shù)組的定義
? ? ? ? i.動態(tài)數(shù)組
1.忽略回車的字符串輸入
? ? ? ? i.getline()
? ? ? ? 借助getline()函數(shù),通過一定的操作可以實現(xiàn)忽略回車的輸入,
string a;
string line;
while (getline(cin, line))a += line;
cout << a << endl;
? ? ? ? 拓:在此循環(huán)中,輸入ctrl + Z,getline會返回false.?
? ? ? ? ii.逐個字符的識別再輸入
string a;
char tmp;
while (1) {cin >> tmp;if (終止條件,如tmp == '0') break;else a += tmp;
}
2.獲取絕對值abs()
#include<cmath>
cout << abs(2-3);
3.做題時的誤區(qū)
? ? ? ? i.
? ? ? ? 當題目需要 ABC的輸入,并指出輸入D即為終止時,并不代表可以直接
if(ch == 'D')break;
else str += ch;
? ? ? ? 題目檢測時給予的輸入不只有ABCD.
? ? ? ? ii.
? ? ? ? 函數(shù)的重復度,會影響評判。
4.多個變量的某一個到達判斷條件
? ? ? ? i.max()
? ? ? ? 如,a,b只要有一個到達21,之后就要進行別的操作,使用(max(a, b) >= 21),明顯比用((a == 21) || (b == 21))要ok很多。
5.[NOIP2016 提高組] 玩具謎題
? ? ? ? i.代碼?
#include <iostream>
#include <iomanip> //操縱器,個位數(shù)字,多位輸出;保留n位小數(shù)輸出
#include <cmath> //向上取整函數(shù)ceil
#include <string>using namespace std;//人
class Man
{
public://朝向int direction;//職稱string name;void setMan(int di, string na){direction = di;name = na;}
};
//命令
class Command
{
public://左右int lefOrRi;//步數(shù)int number;void setCommand(int leR, int num){lefOrRi = leR;number = num;}
};void CheckMan(Man* man, Command* com, int n, int m)
{//man以逆時針站好,0朝里,左遞減,右遞增;1朝外,左遞增,右遞減。//左為0,右為1int p = 0;//指向當前的Manfor (int i = 0; i < m; i++){//先看命令的左右,再看圈里的朝向,p是man的下標,i是com的下標if (com[i].lefOrRi == 0){if (man[p].direction == 0){//優(yōu)化的點,排除循環(huán)的冗長,一步到位p = p - com[i].number;if (p < 0)p = n + p;}else if (man[p].direction == 1){//while (com[i].number--)//p = (p + 1) % n;p = (p + com[i].number) % n;}}//命令朝右else if (com[i].lefOrRi == 1){//朝里if (man[p].direction == 0){/*while (com[i].number--){p = (p + 1) % n;}*/p = (p + com[i].number) % n;}else if (man[p].direction == 1){/*while (com[i].number--){p--;if (p < 0)p = n + p;}*/p = p - com[i].number;if (p < 0)p = n + p;}}}cout << man[p].name;
}void testlan()
{//人數(shù)n,指令數(shù)mint n = 0, m = 0;cin >> n >> m;//短暫存儲方向和職業(yè),指令左右和個數(shù)int di;string na;int leR, num;//建立人物序列,指令序列//Man man[n];常規(guī)數(shù)組定義,其大小,在編譯階段就是已知的需要動態(tài)分配內(nèi)存。Man* man = new Man[n];for (int i = 0; i < n; i++){cin >> di >> na;man[i].setMan(di, na);}Command* com = new Command[m];for (int i = 0; i < m; i++){cin >> leR >> num;com[i].setCommand(leR, num);}CheckMan(man, com, n, m);
}int main()
{testlan();return 0;
}
? ? ? ? 以下6.7,總結(jié)了一些要點。?
6.邏輯上的圓圈
? ? ? ? i.有限個數(shù)n的數(shù)組
????????p = (p + number) % n;
????????//p指示數(shù)組下標
????????//number指示移動的步數(shù)
? ? ? ? //通過取余,可以實現(xiàn),將在儲存結(jié)構(gòu)上的直線前進,等效為在邏輯上的轉(zhuǎn)圈。
? ? ? ? 以上是加法的(這其實是數(shù)據(jù)結(jié)構(gòu),棧與隊列部分的知識點),當然就有減法的情況,
????????p = p - number;
????????if (p < 0)
?? ??? ??? ??? ?p = n + p;
? ? ? ? 可優(yōu)化為
? ? ? ? p = (p - number + n) % n;
? ? ? ? 這沒什么好說的。
7.數(shù)組的定義
? ? ? ? i.動態(tài)數(shù)組
????????int n;
????????cin >> n;
????????int a[n];
? ? ? ? 上文代碼會報錯,這種常規(guī)數(shù)組定義在編譯階段就完成了創(chuàng)建(上文數(shù)組大小需要在運行階段才能確定,這是矛盾的),?[] 內(nèi)只能是常數(shù)。
? ? ? ? 要實現(xiàn)上文這種,在運行后確立數(shù)組大小的形式,就是建立動態(tài)數(shù)組。
? ? ? ? · 法一----使用vector
? ? ? ? int n;
? ? ? ? cin >> n;
? ? ? ? vector<int> a(n);
? ? ? ? · 法二----new關(guān)鍵字(不如法一安全)
? ? ? ? int* a = new int[n];
? ? ? ? delete[] a;