程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> 寫代碼要注意的幾點。,寫代碼

寫代碼要注意的幾點。,寫代碼

編輯:C++入門知識

寫代碼要注意的幾點。,寫代碼


一。快速冪

 

1 /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
2 /*  對於有可能爆數組的值要強制轉換類型  */
3 /*         並對這個值取模mod            */
4 /*   const int mod (1e9為double類型)    */
5 /*           強制轉換為int              */ 
6 /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/ 

 


1 int fast_pow(int n,int k){ 2 int ans = 1;//在函數內部聲明。 3 if(k == 0) 4 return 1; 5 for(;k;k>>=1,n=(LL)n*n%mod) 6 if(k&1) 7 ans=(LL)ans*n%mod; 8 return ans; 9 }

二。並查集壓縮路徑時

int find(int x){
    if(fa[x]==x)
    return x;
    else{
         int  t=fa[x];  
           fa[x]=find(t);//先等於find(t),再返回;
           }
    return fa[x];
}

三。取模時

for(int i = 2;i <= k+1;i++)
       for(int j = 1;j <= i;j++){
             f[i][j] = (LL)(f[i-1][j]+f[i-1][j-1]) % mod;//取模的運算級高,加法要加括號; 
    }

四。讀字符串時

char s[100];
scanf("%s",s);//只寫變量名稱,不寫大小;
scanf("%s",s+1);//從下標[1]開始存;

讀下一個字符串前要讀一個空字符串,(行末空格和回車);

五。函數內的變量最好是局部變量。

六。開數組和定義新變量時一定要對照原題中的數據范圍,防止越界爆數組或是數組開大浪費。

七。提交前注意檢查頭文件和讀入輸出文件‘

freopen(".in","r",stdin);
freopen(".out","w".stdout);//尤其是這一行。不要用斜槓注釋掉‘’

八。注意比較形似的STL

lower_bound();
 upper_bound();
 //在一個升序數組上進行二分查找。
 //前者返回第一個大於等於查詢值的位置;
 //第二個返回第一個大於查詢值的位置;

九。一般遇到讓若干項元素的最小值最大或最大值最小的問題,要用二分的方法;

二分答案mid,檢查一下能不能滿足題中的條件,如果可以,下一步在[mid+1,r]中再二分,反之在[l,mid]中二分。

十。牢記歐幾裡得算法和擴展歐幾裡得算法

int gcd(int a,int b){
    if(!b)  return a;
    else return gcd(b,a&b);
}//歐幾裡得算法。
void exgcd(int a,int b,int &d,int &x,int &y){
    if(!b){
        d = a;
        x = 1;
        y = 0;
    }
    else{
        exgcd(b,a%b,d,y,x);
        y-=((a/b)*x);
    }
}//擴展歐幾裡得算法。

有時得到的x,y是負數,解集為(x+k*b' , y-k*a');

b' = b/gcd(a,b);

a' = a/gcd(a,b);

十一。取模的基本性質

(a+b)%b = ((a%n)+(b%n))% n;

(a- b)%b = ((a%n)-(b%n)+ n)% n ;

a*b%n = (a%n)*(b&n)%n;

除法不能取模,如果要取模,要先要求逆元;

十二。標記用完要清零。

十三。大數據的運算要用高精度。

十四。01背包和完全背包的區別

void ZeroOnePack(int f[],int V,int v,int w){
    for(int i = V,i>=v;--i)
       f[i] = max(f[i],f[i - v] + w);
} 
void CompletePack(int f[],int V,int v,int w){
    for(int i = v;i <= V;i++)
       f[i] = max(f[i],f[i - v] + w);
}
十五。int a;int b;double sum;
在計算sum = a + b;時要把a和b強制轉化成double類型
int a;int b;
double sum;
sum = (double) a + b;

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved