1. 程式人生 > >平時問題彙總(持續更新)

平時問題彙總(持續更新)

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. 

#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裡面
6.

#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