蓝桥杯常用代码模板总结(C/C++)
藍橋杯常用代碼模板總結(C/C++)
1.排序
(1)冒泡排序
C++代碼:
2.快速冪運算
long pow_2(int b) { long x = 2 ; long res = 1 ; while ( b > 0 ){ if ( b & 1 ) res *= x; b >>= 1;//右移一位 x = x * x ; } return res; }注:這里所求的是2的冪運算(代碼原理就不詳細講解了~),如果要求解其他冪次方,可作如下修改:
long pow_2 ( int a,int b ) { long x = a ; ........ }3.最大公約數
int gcd ( long a , long b ) {return b==0?a:gcd(b,a%b); }4.進制轉換問題
(1)使用setbase(n)函數
在C++中提供setbase(n)進制轉換函數,支持八進制、十進制以及十六進制之間的相互轉換,舉例格式如下:
注:
- 將x轉換為n進制輸出
- 需要加入的頭文件:
代碼示例:將十六進制轉換為八進制輸出
輸入:輸入的第一行為一個正整數n (1<=n<=10);
接下來n行,每行一個由0-9、大寫字母A~F組成的字符串,表示要轉換的十六進制正整數
輸出:輸出n行,每行為輸入對應的八進制正整數
運行結果:
5.判斷素數
6.全排列總結
全排列也是藍橋杯中常考的題型,全排列的實現方法有多種,模板代碼如下:
(1)采用遞歸方法
(2)采用next_permutation函數
首先需要添加頭文件
代碼模板:
int main(int argc,const char *argv[]) {do{if(check())ans++;}while(next_permutation(a,a+13));cout<<ans<<endl;return 0; }next_permutation(數組頭地址,數組尾地址);若下一個排列存在,則返回真,如果不存在則返回假;若求上一個排列,則用prev_permutation。
(3)這可以算是對第一種方法的簡化
舉個栗子~
現在小學的數學題目也不是那么好玩的。 看看這個寒假作業:□ + □ = □□ - □ = □□ × □ = □□ ÷ □ = □每個方塊代表1~13中的某一個數字,但不能重復。 比如:6 + 7 = 139 - 8 = 13 * 4 = 1210 / 2 = 5以及:7 + 6 = 139 - 8 = 13 * 4 = 1210 / 2 = 5就算兩種解法。(加法,乘法交換律后算不同的方案)你一共找到了多少種方案?請填寫表示方案數目的整數。 注意:你提交的應該是一個整數,不要填寫任何多余的內容或說明性文字。方法一:
#include<iostream> #include<cstdio> using namespace std; int a[]={1,2,3,4,5,6,7,8,9,10,11,12,13}; int ans=0; bool check() {if(a[0]+a[1]==a[2]&&a[3]-a[4]==a[5]&&a[6]*a[7]==a[8]&&a[9]%a[10]==0&&a[9]/a[10]==a[11])return true;return false; } void f(int k) {if(k==13){if(check())ans++;}for(int i=k;i<13;++i){int t=a[i];a[i]=a[k];a[k]=t;f(k+1);{int t=a[i];a[i]=a[k];a[k]=t;}}} int main(int argc,const char *argv[]) {f(0);cout<<ans<<endl;return 0; }方法二:
#include<iostream> #include<cstdio> #include<algorithm> using namespace std; int a[]={1,2,3,4,5,6,7,8,9,10,11,12,13}; int ans=0; bool check() {if(a[0]+a[1]==a[2]&&a[3]-a[4]==a[5]&&a[6]*a[7]==a[8]&&a[9]%a[10]==0&&a[9]/a[10]==a[11])return true;return false; } int main(int argc,const char *argv[]) {do{if(check())ans++;}while(next_permutation(a,a+13));cout<<ans<<endl;return 0; }方法三:
#include<iostream> #include<cstdio> using namespace std; int a[]={1,2,3,4,5,6,7,8,9,10,11,12,13}; int ans=0; int path[13]; bool vis[13]; bool check(int path[12]) {if(a[0]+a[1]==a[2]&&a[3]-a[4]==a[5]&&a[6]*a[7]==a[8]&&a[9]%a[10]==0&&a[9]/a[10]==a[11])return true;return false; }void f(int k,int path[12]) {if(k==13){if(check(path))ans++;}for(int i=0;i<13;++i){if(i>0&&a[i]==a[i-1]&&!vis[i-1]) continue;if(!vis[i]){vis[i]=true;path[k]=a[i];f(k+1,path);vis[i]=false;}}} int main(int argc,const char *argv[]) {f(0,path);cout<<ans<<endl;return 0; }7.優先隊列
定義:
Type:數據類型;
Container:容器類型,必須是用數組實現的容器,比如vector,deque等等,但不能用 list,一般默認為vector;
Functional:比較的方式。
自定義數據類型時需要傳入三個參數,使用基本數據類型時,只需要傳入數據類型,默認為大頂堆(降序)。
舉例:
例題:
標題:第幾個幸運數
(更新中…)
總結
以上是生活随笔為你收集整理的蓝桥杯常用代码模板总结(C/C++)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 局域网内台式机使用笔记本作代理服务器上网
- 下一篇: C++ 解决经典哥尼斯堡七桥问题