平時問題彙總(持續更新)
1. 判斷邊界一定要注意,是 i>=0&&i<m j>=0&&j<n 或者 i>=1&&i<=m j>=1&&j<=n .這一小問題要特別注意。
2. ++i 不能隨便用 要和 i+1 區別開 前者i的值發生變化而後者i的值保持不變,不能用混
3. 遞迴求兩個數的最大公約數
int gcd(int m,int n)
{
return n==0?m:gcd(n,m%n);
}
4. 一個遞迴函式往往首先要考慮是否越界,然後再進行其它操作
5.
6.#include <iostream> //#include <string.h> #include <stdio.h> #include <stdlib.h> using namespace std; int main() { char c; c=getchar(); string s; getline(cin,s); int t; t=s.length(); cout<<c<<endl; } getchar() 和getline(cin,s)的標頭檔案都是#include <stdio.h> codeblocks裡面
#include <iostream>
using namespace std;
int main()
{
int *a=new int[4](); //該語句的作用是把a數組裡面的四個元素賦值為0 ps:該語句在VC 6.0裡面不起作用,不能賦值為0 , 在codeblocks裡面可以執行
for(int i=0;i<=3;i++)
cout<<*(a+i)<<endl; //輸出四個0
delete []a;
return 0;
}
7. char a[100] ; 使用cin>>a可以 ,但不能存空格 , int a[100], 不能用cin>>a
8. string a; getline(cin,a) 標頭檔案<string.h> char a[100]; gets(a)標頭檔案 <stdio.h> 二者都可以存空格 string a; cin>>a 不可以存空格
9. int a[100][100]= { {0} }; 初始化二維陣列
10.
while(scanf("%d",&n)==1) 注意==1有時候加上這個就由超時變成不超時
11. 奇數與1 得1 (3&1) (5&1) 都是1 注意加括號
偶數與1 得0 (2&1) (6&1) 都是0 注意加括號
12. 程式設計中0這個數字需要特別特別注意,考慮下要不要單獨處理,而且絕不能出現在除數的位置,切記!
13. cout<<'A'+1; 和char s='A'+1; cout<<s; 不一樣 ,前者輸出的是數字65,後者輸出的是B。
14. 字母O和數字0千萬別搞混了,有時候因為這一個小錯誤,而導致全盤皆輸。
15. 寫組合函式公式時:
for(int i=0;i<n;i++)
{
cmn=cmn*(m-i)/(i+1);
}
不能寫成cmn/(i+1)*(m-i), 因為cmn初值為1,一相除會有誤差。
採用遞迴的形式:
int c(int m,int n)
{
if(n==0)
return 1;
if(n>m)
return 0;
return c(m-1,n)+c(m-1,n-1);
}
16. 用一個vis陣列來記錄是否訪問過,用bool型別,別用int型別,二者是不超時與超時的區別。
17. const int N= 100; int a[N], 對a初始化時,最大界限是N-1, 不是N
18. 對於無窮大 const int inf=0x7fffffff ,對陣列賦值時用 fill(dp,dp+n,inf) ,不能用memset
19.π因為精度問題 ,程式碼中最好用 acos(-1)。有時候會因為精度不夠通不過。
20.檔案輸入程式碼 freopen("input.txt", "r", stdin);
21.
cout<<0x7fffffff<<endl; 2147483647//不能用memset賦值
cout<<0x3f3f3f3f<<endl; 1061109567 //可用memset給陣列賦值,值為原數
22. 隨機數
srand(time(0)); //根據系統時間設定隨機數種子
int i = rand() % N; //取得區間[0,N)的整數
23.從檔案中讀入
freopen("a.txt","r",stdin);
k=0;
while(1)
{
cin>>data[k];//從檔案中讀入數到data[]中,k為資料的個數,一開始初始化data[]=-1,退出條件
if(data[k]==-1)
break;
k++;
}
freopen(" con: ", " r ",stdin);//轉到控制檯
cin.clear();
24. const int inf=0x3f3f3f3f;
int a[5]; 可以用 memset(a,inf,sizeof(a));
double b[5]; 不可以用 memset(b,inf,sizeof(a));
25. bool 數組裡面只能用0 或1 不能存其它值,切記啊!
26. sort這個函式可以傳兩個引數或三個引數。第一個引數是要排序的區間首地址,第二個引數是區間尾地址的下一地址。也就是說,排序的區間是[a,b)。簡單來說,有一個數組int a[100],要對從a[0]到a[99]的元素進行排序,只要寫sort(a,a+100)就行了,預設的排序方式是升序。
27. for( i =a ;i <= b;i++) 注意for迴圈裡面i 和a ,b 的型別要一致 ,不能一個 int 一個long long
28. 輸入如下的01矩陣
011
101
110 每一行的三個數是連續的,要想分開存入矩陣中,讀入的時候用 scanf("%1d",&num);就可以了。
28. bool b[] ;陣列是可以用memset(b,true,sizeof(b)); 或 memset(b,false,sizeof(b));
因為bool佔一個位元組,每個位元組都初始化為00000001