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

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 人文社科 > 生活经验 >内容正文

生活经验

十二届蓝桥杯省赛B组C++解析(填空题部分)

發(fā)布時(shí)間:2023/11/27 生活经验 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 十二届蓝桥杯省赛B组C++解析(填空题部分) 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

十二屆藍(lán)橋杯省賽B組C++解析(填空題部分)

目錄

  • 十二屆藍(lán)橋杯省賽B組C++解析(填空題部分)
  • A:空間
  • B:卡片
  • C:直線
  • D:貨物擺放
  • E:路徑

A:空間


該題是一道計(jì)算機(jī)基礎(chǔ)原理題,這里需要了解的是:
** 1MB=1024KB=1024*1024B
KB即千字節(jié),B為字節(jié)
1B=8bit(位)
因?yàn)橥ǔR粋€(gè)字節(jié)(剛好最大256位)可以儲(chǔ)存一個(gè)ASCII碼**

故計(jì)算過(guò)程應(yīng)如下:
25610241024/4=67108864

答案:67108864

B:卡片


暴力解決即可:

#include<iostream>using namespace std;
int a[10]={0};int process(int n)
{while(n != 0){a[n%10]--;n/=10;}
}bool Judge()
{for(int i = 0; i < 10; i++){if(a[i] <= 0)return false;}return true;
}int main()
{for(int i = 0; i < 10; i++)a[i] = 2021;int n = 1;while(Judge()){process(n);n++;}cout << n - 1;return 0;
} 

答案:3181

C:直線


直線的一般方程為:
(y1-y2)x+(x2-x1)y+x1y2-x2y1=0
看作三個(gè)部分:
A=(y1-y2) B=(x2-x1) C=x1y2-x2y1
將三個(gè)部分化最簡(jiǎn),以類的形式記錄后
用map映射結(jié)構(gòu)體記錄即可

#include<iostream>
#include<map>using namespace std;int gcd(int a, int b)
{return b ? gcd(b, a%b):a;
}class ABC
{  
public:int A;int B;int C;ABC(){A = 0;B = 0; C = 0 ;}ABC(int a, int b, int c){int tool = 0;if(c == 0)tool = gcd(a,b);elsetool = gcd(gcd(a,b),c);A = a / tool;B = b / tool;C = c / tool; }
};bool operator < (ABC a,ABC b)  //map使用的時(shí)候得定義大小判斷
{if(a.A<b.A)return true;else if(a.A==b.A&&a.B<b.B)return true;else if(a.A==b.A&&a.B==b.B&&a.C<b.C)return true;return false;
}map<ABC,int>mp;
int main()
{int x1, x2, y1, y2;int A,B,C;int ans = 0;for(y2 = 1; y2 <21; y2++){for(x2 = 0; x2 < 20; x2++){for(y1 = 0; y1 < y2 ; y1++){for(x1 = 0; x1 <20; x1++){if(x1 == x2 || y1 == y2 )continue;A=y1-y2;B=x2-x1;C=y2*x1-x2*y1;ABC a(A,B,C);if(mp[a]!=1){mp[a]=1;ans++;}}}}}cout << ans+21+20;return 0;
}

答案:40257

D:貨物擺放

求出要求體積的各個(gè)因子,判斷這些因子組合出目標(biāo)值的情況的數(shù)量即為答案
因子的個(gè)數(shù)可以先算出來(lái)直接帶進(jìn)去

#include<iostream>
#include<math.h>using namespace std;long long int n=2021041820210418;	
long long int N[129];
long long int mark = 0;
int ans = 0;
int a = 0;int main()
{for(long long int i = 1; i < sqrt(n); i++){if(n%i == 0){N[a++] = i;N[a++] = n/i;mark+=2;}}N[128] = 0;for(long long int i = 0; i < 128; i++){for(long long int j = 0; j < 128; j++){for(long long int k = 0; k < 128; k++){if(N[i] * N[j] * N[k] == n)ans++;}}}cout << ans;return 0;
}

答案:2430

E:路徑


這題參考了一位大佬的思路,本文最下面也附了他的鏈接。
這題的思路如下(依次題條件舉例解釋):
1.求1到3的最短路程
情況有兩種:
①1 ->2 + 2>3
②1->3
求出其中最短的即可
2.求1到4的最短路程
①1->2 + 2->4
②1->3 + 3->4
求出其中最短的即可
3.求1到5的最短路程
①1->2 + 2->5
②1->3 + 3->5
③1->4 + 4->5
求出其中最短的即可
4.求1到24的最短路程
①1->3 + 3->24
②1->4 + 4->24
③1->5 + 5->24

?1->22 + 22->24
?1->2 + 2->3 + 3->24(若為該情況,與①比較,發(fā)現(xiàn)其實(shí)是1->3與1 ->2 + 2>3的比較,因?yàn)楦〉那闆r已經(jīng)被記錄,其實(shí)就是1->3 + 3->24這種情況)

1->2+2->23+23->24(若為該情況,即為1->23 + 23->24,因?yàn)闊o(wú)論是1->3+3->23還是1->4+4->23都會(huì)小于求的的1->23的距離)
可以發(fā)現(xiàn)從1,2問(wèn)求出的結(jié)果可以逐漸求出1->23,1->24,1->25的結(jié)果。
求法即為算出:
①1->3 + 3->24
②1->4 + 4->24
③1->5 + 5->24

?1->23 + 23->24
中最短的即可
5.求1到2021的最短路程
①1->2000 + 2000->2021
②1->2001 + 2001->2021
③1->2002 + 2002->2021

?1->2020 + 2020->2021
中最短的即可

代碼如下:

#include<iostream>using namespace std;
int dp[2022];//最大公約數(shù)
int gcd(int a, int b)
{return b ? gcd(b, a % b) : a;
}//最小公倍數(shù)
int lcm(int a, int b)
{return ((a * b) / gcd(a,b)); 
}//求到各點(diǎn)最小距離函數(shù)
void fun(int n)
{int i = 1;if(n >= 22)i = n - 21;int min = dp[i] + lcm(i,n);for (++i; i < n; i++){int temp = dp[i] + lcm(i, n);min = temp > min ? min : temp;}dp[n] = min;
}int main()
{dp[1] = 0;for (int i = 2; i <= 2021; i++){fun(i);}cout << dp[2021];
}

答案:10266837

全部題的解析可以看:https://blog.csdn.net/JAPHETH1/article/details/116325106

總結(jié)

以上是生活随笔為你收集整理的十二届蓝桥杯省赛B组C++解析(填空题部分)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。