日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

蓝桥杯常用代码模板总结(C/C++)

發布時間:2023/12/18 c/c++ 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 蓝桥杯常用代码模板总结(C/C++) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

藍橋杯常用代碼模板總結(C/C++)
1.排序
(1)冒泡排序
C++代碼:

void BubbleSort(int a[], int n) { for (int i = 0; i < n - 1; i++) { for (int j = 0; j < n - i - 1; j++) { if (a[j] > a[j + 1]) { int t = a[j]; a[j] = a[j + 1]; a[j + 1] = t; } } } }

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)進制轉換函數,支持八進制、十進制以及十六進制之間的相互轉換,舉例格式如下:

cout<<setbase(n)<<x<<endl;

注:

  • 將x轉換為n進制輸出
  • 需要加入的頭文件:
#include<iostream> #include<iomanip>

代碼示例:將十六進制轉換為八進制輸出
輸入:輸入的第一行為一個正整數n (1<=n<=10);
接下來n行,每行一個由0-9、大寫字母A~F組成的字符串,表示要轉換的十六進制正整數
輸出:輸出n行,每行為輸入對應的八進制正整數

#include<iostream> #include <iomanip> using namespace std;int main(){int n,x,i;cin>>n;int a[n];for(int i=0;i<n;i++){cin>>hex>>x;a[i]=x; }for(int i=0;i<n;i++){cout<<setbase(8)<<a[i]<<endl;}return 0;}

運行結果:

5.判斷素數

/* 判斷素數 */ bool isPrime(LL n) {for (int i = 2; i * i <= n; ++i)if (n % i == 0)return false;return true; }

6.全排列總結
全排列也是藍橋杯中常考的題型,全排列的實現方法有多種,模板代碼如下:
(1)采用遞歸方法

void f(int k) {if(k==13)//這個判斷條件由題目決定,這里指有13個需要全排列的數{if(check())//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;}} }

(2)采用next_permutation函數
首先需要添加頭文件

#include<algorithm>

代碼模板:

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)這可以算是對第一種方法的簡化

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]){//沒有被用過的元素可以抓入到pathvis[i]=true;//標記為已訪問path[k]=a[i];//被a[i]填入到path[k]中f(k+1,path);//遞歸vis[i]=false;//回溯}}}

舉個栗子~

現在小學的數學題目也不是那么好玩的。 看看這個寒假作業:□ + □ = □□ - □ = □□ × □ = □□ ÷ □ = □每個方塊代表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.優先隊列
定義:

priority_queue<Type, Container, Functional>

Type:數據類型;
Container:容器類型,必須是用數組實現的容器,比如vector,deque等等,但不能用 list,一般默認為vector;
Functional:比較的方式。
自定義數據類型時需要傳入三個參數,使用基本數據類型時,只需要傳入數據類型,默認為大頂堆(降序)。
舉例:

//升序 priority_queue <int,vector<int>,greater<int> > q; //降序 priority_queue <int,vector<int>,less<int> >q; //注意>>之間一定要有空格,否則會成為右移運算符

例題:
標題:第幾個幸運數

到x星球旅行的游客都被發給一個整數,作為游客編號。 x星的國王有個怪癖,他只喜歡數字3,5和7。 國王規定,游客的編號如果只含有因子:3,5,7,就可以獲得一份獎品。我們來看前10個幸運數字是: 3 5 7 9 15 21 25 27 35 45 因而第11個幸運數字是:49小明領到了一個幸運數字 59084709587505,他去領獎的時候,人家要求他準確地說出這是第幾個幸運數字,否則領不到獎品。請你幫小明計算一下,59084709587505是第幾個幸運數字。需要提交的是一個整數,請不要填寫任何多余內容。 #include<bits/stdc++.h> using namespace std; const int a[]={3,5,7}; const long long maxn=59084709587505; priority_queue<long long,vector<long long>,greater<long long> > p; set<long long>s; int res; int main() {long long n,m;for(int i=0;i<3;i++)p.push(a[i]);while((n=p.top())<=maxn){p.pop();res++;for(int i=0;i<3;i++){m=n*a[i];if(!s.count(m)){s.insert(m);p.push(m);}}}cout<<res<<endl;return 0; } //參考鏈接: //原文鏈接:https://blog.csdn.net/krypton12138/article/details/79801924

(更新中…)

總結

以上是生活随笔為你收集整理的蓝桥杯常用代码模板总结(C/C++)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。