word超鏈接網(wǎng)站怎么做seo課程培訓(xùn)中心
目錄
一、選擇題
二、算法題
1、不要二
2、把字符串轉(zhuǎn)換成整數(shù)
一、選擇題
1、
解析:printf(格式化串,參數(shù)1,參數(shù)2,.….),格式化串: printf第一個參數(shù)之后的參數(shù)要按照什么格式打印,比如%d--->按照整形方式打印,不過格式串有一定規(guī)定,%之后跟上特定的字符才代表一定的格式化。%Q—>無效的格式—>編譯器會忽略%,printf("%Q");—>直接輸出Q。
所以printf("%%%%\n");會輸出%%。
2、
解析:這個程序使用了一個宏定義 SQR(A),用來計算一個表達(dá)式的平方。但是,這個宏定義有一個問題,就是沒有用括號把 A 包起來,導(dǎo)致在使用宏展開時,可能會出現(xiàn)優(yōu)先級的錯誤。
所以SQR(y+z) 實(shí)際上被展開為 y+zy+z,而不是 (y+z)(y+z)。隨后計算可得到x的值為0。
3、
解析:這個函數(shù)是一個遞歸函數(shù),也就是說它會調(diào)用自身來計算結(jié)果。這個函數(shù)的邏輯是,如果 n 小于 2,就返回 n 本身,否則就返回 2 倍的 foo(n-1) 加上 foo(n-2)。我們先算出f(0)=0, f(1)=1,然后把f(5)變成由f(0),f(1)組成的表達(dá)式,就可以計算出答案。
二、算法題
1、不要二
題目解析:從題目里我們知道,如果(x1,y1)放了蛋糕,則滿足 ( (x1-x2) * (x1-x2) + (y1-y2) * (y1-y2) ) == 4的(x2,y2)不能放蛋糕。
( (x1-x2) * (x1-x2) + (y1-y2) * (y1-y2) ) == 4看起來是一個無解的表達(dá)式。
但是我們可以進(jìn)行加法表達(dá)式分解:1+3=4,3+1=4,2+2=4,0+4=4,4+0=4
仔細(xì)分析前三個表達(dá)式是不可能的,因?yàn)?x1-x2) * (x1-x2)表達(dá)式結(jié)果不能等于2或3。
也就是說( (x1-x2) * (x1-x2) 和(y1-y2) * (y1-y2) )兩個表達(dá)式一個等于0,一個等于4。
仔細(xì)讀理解了上面的題目解讀,本題就非常簡單了,使用vector<vector<int>>定義一個二維數(shù)組,resize開空間并初始化,每個位置初始化為1,表示當(dāng)?shù)案?#xff0c;a[i][j]位置放蛋糕,則可以標(biāo)記處a[i][j+2]和a[i+1][j]位置不能放蛋糕,遍歷一遍二維數(shù)組,標(biāo)記處不能放蛋糕的位置,統(tǒng)計也就統(tǒng)計出了當(dāng)?shù)案獾奈恢脭?shù)。
#include <iostream>
#include<vector>
using namespace std;int main() {int W, H;while (cin >> W >> H) {int count = 0;vector<vector<int>> v;v.resize(W);for (auto& e : v) {e.resize(H, 1);}for (int i = 0; i < W; i++) {for (int j = 0; j < H; j++){if (v[i][j] == 1) {count++;if (i + 2 < W){v[i + 2][j] = 0;}if (j+2 <H ){v[i][j+2]=0;}}}}cout<<count;}}
2、把字符串轉(zhuǎn)換成整數(shù)
題目解析:本題本質(zhì)是模擬實(shí)現(xiàn)實(shí)現(xiàn)C庫函數(shù)atoi,不過參數(shù)給的string對象。
首先,判斷字符串是否為空,如果為空,就返回 0。然后,判斷字符串的第一個字符是否是 ‘+’ 或 ‘-’,如果是,就記錄下符號,并把字符串去掉第一個字符。接著,遍歷字符串的每一個字符,如果是數(shù)字,就把它轉(zhuǎn)換成整數(shù),并累加到結(jié)果中;如果不是數(shù)字,就返回 0。最后,根據(jù)符號,返回正數(shù)或負(fù)數(shù)。
str[i] - ‘0’ 是一種把字符轉(zhuǎn)換成整數(shù)的方法。它的原理是利用字符的 ASCII 碼,也就是每個字符對應(yīng)的一個數(shù)字。例如,字符 ‘0’ 的 ASCII 碼是 48,字符 ‘1’ 的 ASCII 碼是 49,以此類推,字符 ‘9’ 的 ASCII 碼是 57。
class Solution {
public:int StrToInt(string str) {if(str.empty()){return 0;}int sum=0;int sym=1;if(str[0]=='-'){sym=-1;str[0]='0';}if(str[0]=='+'){str[0]='0';}for(int i=0;i<str.size();++i){if(str[i] < '0' || str[i] > '9'){sum = 0;break;}sum = sum *10 + str[i] - '0';}return sum*sym;}
};