作為一名大一學生應該是力求上進的!!!!!!!
今天給大家分享三個藍橋杯簡單的基礎題,以后每天都會有的,會逐步變難,一起沖刺今年的藍橋杯省賽
至于為什么要參加比賽呢!
都是為了掙錢所以才學習的
首先我給大家看阿里的招聘資訊

大家看 阿里的招聘 把第一行直接寫上 有競賽獲獎,廢話就不說了,直接上題吧
藍橋杯試題
- 試題:數的分解
- 試題:特別數的和
- 試題B:既約分數
- 方法一----暴力求最大公約數
- 方法二---輾轉相除求最大公約數
- 關于小編
試題:數的分解
【問題描述】把2019分解成3個各不相同的正整數之和,并且要求每個正整數都不包含數字2和4,一共有多少種不同意交換3個整數的順序被視為同一種方法,例如1000+1001+18和1001+1000+18被視為同一種,
這是個填空題我們中只需要把結果的出來即可 不用思考步驟程序
因為我們才剛開始嘛,所以我直接暴力解決 先上代碼再解釋
#include<bits/stdc++.h>
using namespace std;
int ans;
int f(int n){
int t;
while(n>0){
t=n%10;
n/=10;
if(t==2||t==4) return 0;
}
return 1;
}
int main(){
for(int i=1;i<2019;i++){
if(f(i)==0) continue;
for(int j=i+1;j<2019;j++){
if(f(j)==0) continue;
for(int k=j+1;k<2019;k++){
if(f(k)==0) continue;
if(i+j+k==2019) ans++;
}
}
}
cout<<ans;
return 0;
}
第一行 是一個萬能頭檔案
主要思路:將三個數直接暴力列舉,將其每一位都分解出來判斷是否有2和4 如果存在直接排除 如果沒有則暫時“錄取這個數”;再往下執行
因為這些題都是基礎題,相信大家很容易遍可以理解的
試題:特別數的和
時間限制:1.0s記憶體限制:256.0MB
問題描述】小明對數位中含有2、0、1、9的數字很感興趣(不包括前導0),在1到40中這樣的數包括1、2和40,共28個,他們的和是574,請問,在1到n中,所有這樣的數的和是多少?
這是一個編程題;時間上面大家要注意了,,但是這個題暴力解決一樣不超過限時的;下一步————》上代碼
#include<bits/stdc++.h>
using namespace std;
int f(int n){
int t;
while(n>0){
t=n%10;
n=n/10;
if(t==2||t==0||t==1||t==9) return 1;
}
return 0;
}
int main(){
int n,sum=0;
cin>>n;
for(int i=1;i<=n;i++){
if(f(i)==1) sum+=i;
}
cout<<sum;
return 0;
}
這個題的主要思路還是暴力列舉 直接從1到輸入的數 然后每一個判斷是否包含2.0.1.9 如果包含就回傳1 不包含就回傳0; 回傳1的再用計數器加一 即可;
試題B:既約分數
【問題描述】
如果一個分數的分子和分母的最大公約數是1,這個分數稱為既約分數,例如,3/4 ,5/2, 1/8,71都是既約分數,請問,有多少個既約分教,分子和分母都是1到2020之間的整數《包括15和和2020》
方法一----暴力求最大公約數
這個方法就是最大公約數 就是這兩個數的公共因數;看我的代碼;
#include<bits/stdc++.h>
using namespace std;
int ans;
int f(int a,int b){
int t=max(a,b);
for(int i=t;i>=1;i--){
if(a%i==0&&b%i==0)
if(i==1) return 1;
else return 0;
}
}
int main(){
for(int i=1;i<=2020;i++){
for(int j=1;j<=2020;j++){
if(f(i,j)==1) ans++;
}
}
cout<<ans;
return 0;
}
一樣的暴力 一樣的不留余地 一樣的簡單,
方法二—輾轉相除求最大公約數
這個方法主要介紹一下輾轉相除求最大公約數
輾轉相除法求兩個數的最大公約數的步驟如下: 先用小的一個數除大的一個數,得第一個余數; 再用第一個余數除小的一個數,得第二個余數;
又用第二個余數除第一個余數,得第三個余數;
這樣逐次用后一個數去除前一個余數,直到余數是0為止.那么,最后一個除數就是所求的最大公約數(如果最后的除數是1,那么原來的兩個數是互質數).
例如求1515和600的最大公約數, 第一次:用600除1515,商2余315; 第二次:用315除600,商1余285;
第三次:用285除315,商1余30; 第四次:用30除285,商9余15; 第五次:用15除30,商2余0.
1515和600的最大公約數是15.
輾轉相除法是求兩個數的最大公約數的方法.如果求幾個數的最大公約數,可以先求兩個數的最大公約數,再求這個最大公約數與第三個數的最大公約數.這樣依次下去,直到最后一個數為止.最后所得的一個最大公約數,就是所求的幾個數的最大公約數.
下面就可以上代碼解題了:
#include<bits/stdc++.h>
using namespace std;
int ans;
int f(int a,int b){
if(b==0) return a;
else f(b,a%b);
}
int main(){
for(int i=1;i<=2020;i++){
for(int j=1;j<=2020;j++){
if(f(i,j)==1) ans++;
}
}
cout<<ans;
return 0;
}
這就是輾轉相除法了,是一個非常好的求最大公約數的方法哦!!!
今天就分享這三個藍橋杯試題了,比較簡單,但萬丈高樓平地起嘛,只要努力早晚會一飛沖天的!
關于小編
小編是一名大一學生 希望大家能從 一 開始學習,努努力,一起變強為了更好的明天奮斗!!!!
小編的QQ號是:2206730228
歡迎大家來騷擾 一起探討編程的奧秘,
小編是個農村人 別來欺負小編啥都不懂嗷
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/272486.html
標籤:其他
上一篇:Java運算子
下一篇:海思驅動開發之暫存器操作
