目錄
複習注意:
int範圍:
long long 範圍:
int轉double輸出:
迴圈讀入,直到檔案結尾 while() eof:
進製轉換問題模板:
將int數字存入int陣列中:
int型陣列轉換為int數字:
scanf函式的返回值問題:
scanf函式與getline函式:
reverse函式:
getchar() 函式的使用:
strcmp函式:
小寫字母轉為大寫:
string類:
二分查詢:
最大公約數:
最小公倍數:
題目標註(水題):之後可以不用再看
需要再看的題目會分類儲存好
int型的資料範圍是[-2^31, 2^31-1], 10位數
如果題目給出的範圍超出,採用 long long 儲存資料,輸出輸入使用%lld
比如題目給出10^10, 是超過int範圍的,用longlong
int最大值為 2^31-1, 定義 inf時定義為0x7fffffff(乙個7,七個f)
範圍是 [-2^63, 2^63) 19位數
輸入輸出為 %lld
floor(x)向下取整,返回乙個<=x的int整型。
ceil(x)向上取整,返回乙個》=x的int整型。
標頭檔案是或
cout << floor(4)《保留一位小數輸出 %.1f 保留兩位 %.2f
%lf 表示double
int a, b;
double c = (double) a / b;
printf("%.1f", c);
位數多於兩位,預設四捨五入
double a = 0.005;
double b = 0.00009;
printf("%.2f %.2f", a, b);
#0.01 0.00
用於沒有給定有多少組資料
while(scanf("%d %d", &m, &n) != eof )
int ans[31], num = 0;
//將十進位制數sum轉化為d進製,結果存放於陣列ans,num表示位數
//ans陣列中存放的數字為反序,要倒著輸出
dowhile(sum != 0);
int num = 0, ans[10]; //num表示下標
while(sum != 0)
//函式實現
void toarray(int n, int num)
}
int tonumber(int num)
return sum;
}
scanf函式是有返回值的,它的返回值分為三種情況:
正整數:表示正確輸入引數的個數,例如執行scanf(「%d %d」, &a, &b); 若輸入「3 4」,返回2;若輸入「3,4」,返回1
0 : 表示使用者輸入不匹配,無正確輸入任何值,若輸入「,3,4」,返回0
eof : 這是在 stdio.h 中定義的常量(通常值為-1),表示輸入流已經結束。在win下,使用者按ctrl + z會看到乙個^z字元,再按下回車,就表示輸入結束;linux/unix下使用ctrl+d表示輸入結束。acm 中, 測試用例都是存在檔案裡面的。在自動測試時, 會以檔案作為輸出, 實際輸入的是檔案的內容,到輸入結束, 會自動得到乙個檔案結尾標記,即scanf返回結果為eof。
鑑於此,我們採用更加簡潔的方法,使用eof來判斷單詞是否已經輸入完畢,**如下:
int num = 0; //記錄單詞個數
char ans[90][90]; //儲存單個單詞
while(scanf("%s", ans[num]) != eof)
num++;
scanf函式讀入字元陣列時,必須讀入字元才算作讀入,空格、換行符都不會讀入
getline函式會讀入一行,不管是空還是有字元
因此我們在使用時一定要注意,如果有空字元會讀入,一定要使用getline
#include using namespace std;
scanf("%s %s", a, b);
int lena = strlen(a);
int lenb = strlen(b);
reverse(a, a+lena);
reverse(b, b+lenb);
也可以反轉string型別
string s;
getline(cin, s);
reverse(s.begin(),s.end());
getchar()是在輸入緩衝區順序讀入乙個字元(包括空格、回車和tab) ,前面的scanf()在讀取輸入時會在緩衝區中留下乙個字元'\n',所以如果不在此加乙個getchar()把這個回車符取走的話,getline()就不會等待從鍵盤鍵入字元,而是會直接取走這個「無用的」回車符,從而導致讀取有誤
printf("%.1f%%\n", samenum * 100.0 / totalnum); 轉義符
#include
當strcmp(str1, str2) == 0 時,表示相等; <0 表示str1的字典序小於str2;>0 表示str1的字典序大於str2的字典序
return strcmp(str1, str2) < 0 表示cmp 函式按照字典序從小到大排序
小轉大要減!
char c1;
if(c1 >= 'a' && c1 <= 'z')
c1 -= 32;
erase()方法:兩種用法
刪除單個元素,必須使用迭代器刪除
刪除乙個區間內的元素,erase(first, end) 即是刪除 [first, end) 之間的元素
string str = "abcde";
str.erase(str.begin() + 4); //刪除4號位e
str.erase(str.begin() + 2, str.end() - 1); //刪除cd
基於有序序列的查詢演算法,高效之處在於,每一步都可以去除當前區間的一半元素,其時間複雜度為o(log n).
upper_bound( begin,end,num):在從小到大遞增的排序陣列中,從陣列的begin位置到end-1位置二分查詢第乙個大於num的數字,找到返回該數字的位址,不存在則返回end。通過返回的位址減去起始位址begin,得到找到數字在陣列中的下標。
lower_bound( begin,end,num):在從小到大遞增的排序陣列中,從陣列的begin位置到end-1位置二分查詢第乙個大於或等於num的數字,找到返回該數字的位址,不存在則返回end。通過返回的位址減去起始位址begin,得到找到數字在陣列中的下標。
在從大到小的排序陣列中,需要過載lower_bound()和upper_bound()
upper_bound( begin,end,num,greater() ):從陣列的begin位置到end-1位置二分查詢第乙個小於num的數字,找到返回該數字的位址,不存在則返回end。通過返回的位址減去起始位址begin,得到找到數字在陣列中的下標。
lower_bound( begin,end,num,greater() ):從陣列的begin位置到end-1位置二分查詢第乙個小於或等於num的數字,找到返回該數字的位址,不存在則返回end。通過返回的位址減去起始位址begin,得到找到數字在陣列中的下標。
#include #include //過載函式時greater()需要引入
#include using namespace std;
int main();
int j = upper_bound(a, a + 6, 2) - a; //第乙個大於2
int k = lower_bound(a, a + 6, 2) - a; //第乙個大於等於2
printf("%d\n", j); //3
printf("%d\n", k); //2
int b[6] = ;
j = upper_bound(b, b + 6, 2, greater()) - b; //第乙個小於2
k = lower_bound(b, b + 6, 2, greater()) - b; //第乙個小於等於2
printf("%d\n", b[j]); //1
printf("%d\n", b[k]); //2
}
reverse(it, it2) 可以將陣列指標在[it, it2) 之間的元素或者容器迭代器內的元素進行反轉
fill(a, a + 5, 233);
可以把陣列或者容器中某一段區間賦為某個相同的值,與memset不同,這裡的賦值可以是陣列型別範圍內的任意值
面試準備知識點
ps用來顯示當前程序的狀態 ps a 顯示所有程序 ps a 顯示所有程序資訊 ps u root 顯示指定使用者資訊 ps ef 顯示所有程序資訊,連同命令列 ps ef grep ssh 查詢指定程序 ps l 將目前屬於自己這次登入的pid與相關資訊列出來 ps aux 列出目前所有的正在記憶...
準備的知識點
1.mybatis是什麼?2.mybatis的體系結構?3.mybatis和hibernate的區別?4.什麼是spring?5.spring mvc的工作原理?6.spring的模組?7.什麼是ioc?什麼是di?ioc的優點是什麼?8.什麼是動態 給 invocationhandler角色,外界...
機試準備(二)
1.判斷是否為閏年 bool isreap int year 2.進製轉換 其他進製轉換為十進位制的時候可以使用while 當用十進位制轉換為其他進製的時候需要使用do while3.回文串 bool judge char str 或者用另一種方式,但是需要注意加上末尾結束符 0 page975.選...