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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

problem b: 一年中的第几天_第九届蓝桥杯B组试题

發布時間:2024/7/5 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 problem b: 一年中的第几天_第九届蓝桥杯B组试题 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1.
標題:第幾天
2000年的1月1日,是那一年的第1天。
那么,2000年的5月4日,是那一年的第幾天?
注意:需要提交的是一個整數,不要填寫任何多余內容。

“==================手動分割============================”

大小月判斷:

https://jingyan.baidu.com/article/7082dc1c504716e40b89bd69.html

然后需判斷閏年,閏年二月有29天,平年二月有28天

①、普通年能被4整除且不能被100整除的為閏年。否則為平年。(如2004年就是閏年,1900年不是閏年)

②、世紀年能被400整除的是閏年。否則為平年。(如2000年是閏年,1900年不是閏年)

int main() {int years;cin>>years;if((years%4==0&&years%100!=0)||years%400==0)cout<<"YES";else cout<<"NO";}

直接手算就可以了

答案:31+29+31+30+4=125


2:明碼
漢字的字形存在于字庫中,即便在今天,16點陣的字庫也仍然使用廣泛。
16點陣的字庫把每個漢字看成是16x16個像素信息。并把這些信息記錄在字節中。
一個字節可以存儲8位信息,用32個字節就可以存一個漢字的字形了。
把每個字節轉為2進制表示,1表示墨跡,0表示底色。每行2個字節,
一共16行,布局是:
第1字節,第2字節
第3字節,第4字節
....
第31字節, 第32字節
這道題目是給你一段多個漢字組成的信息,每個漢字用32個字節表示,這里給出了字節作為有符號整數的值。
題目的要求隱藏在這些信息中。你的任務是復原這些漢字的字形,從中看出題目的要求,并根據要求填寫答案。
這段信息是(一共10個漢字):
4 0 4 0 4 0 4 32 -1 -16 4 32 4 32 4 32 4 32 4 32 8 32 8 32 16 34 16 34 32 30 -64 0
16 64 16 64 34 68 127 126 66 -124 67 4 66 4 66 -124 126 100 66 36 66 4 66 4 66 4 126 4 66 40 0 16
4 0 4 0 4 0 4 32 -1 -16 4 32 4 32 4 32 4 32 4 32 8 32 8 32 16 34 16 34 32 30 -64 0
0 -128 64 -128 48 -128 17 8 1 -4 2 8 8 80 16 64 32 64 -32 64 32 -96 32 -96 33 16 34 8 36 14 40 4
4 0 3 0 1 0 0 4 -1 -2 4 0 4 16 7 -8 4 16 4 16 4 16 8 16 8 16 16 16 32 -96 64 64
16 64 20 72 62 -4 73 32 5 16 1 0 63 -8 1 0 -1 -2 0 64 0 80 63 -8 8 64 4 64 1 64 0 -128
0 16 63 -8 1 0 1 0 1 0 1 4 -1 -2 1 0 1 0 1 0 1 0 1 0 1 0 1 0 5 0 2 0
2 0 2 0 7 -16 8 32 24 64 37 -128 2 -128 12 -128 113 -4 2 8 12 16 18 32 33 -64 1 0 14 0 112 0
1 0 1 0 1 0 9 32 9 16 17 12 17 4 33 16 65 16 1 32 1 64 0 -128 1 0 2 0 12 0 112 0
0 0 0 0 7 -16 24 24 48 12 56 12 0 56 0 -32 0 -64 0 -128 0 0 0 0 1 -128 3 -64 1 -128 0 0
注意:需要提交的是一個整數,不要填寫任何多余內容。

“==================手動分割============================”

1.一共十個漢字,每一行代表一個漢字,需要把int類型的十進制數據轉換成二進制數據,int在此題中占有8位,可以考慮開辟一個長度為8的數組來記錄二進制數值。

2.難點在于如何轉換負數的二進制,負數的二進制在計算機中以補碼的形式存在,對其相反數取補碼便是負數在計算機中存儲的形式。這里筆者剛開始認為取補碼的形式是原碼符號位不動,真值部分取補碼進行轉換,實際上直接對絕對值的原碼形式取補是一樣的,因為取補的時候要進行取反,所以符號位0轉換成了符號位1。

3.補碼反碼原碼知識鏈接:https://blog.csdn.net/sugarbliss/article/details/79789250

下面上代碼:

#include<bits/stdc++.h> using namespace std; int Binary[8];//定義儲存二進制的數組 void TransFormation(int a){bool isnegative=false;int temp,index=0;memset(Binary,0,sizeof(Binary));//初始化數組 if(a<0){isnegative=true;a=-a;}while(a){Binary[index++]=a%2;//倒序儲存二進制碼 a/=2;}if(isnegative){for(int i=0;i<8;i++){Binary[i]^=1;//按位取反,得到反碼 } for(int j=0;j<8;j++){if(j==0)temp=Binary[j]+=1;//加一,取補碼 elsetemp=Binary[j];if(temp==2){Binary[j+1]+=1;//處理進位 Binary[j]%=2;}elsebreak; }}for(int i=7;i>=0;i--){if(Binary[i])cout<<"#";elsecout<<' ';} }int main() {int data[15][40];int m=10,n=32;for(int i=0;i<m;i++)for(int j=0;j<n;j++)cin>>data[i][j];for(int i=0;i<m;i++){for(int j=0;j<n;j++){TransFormation(data[i][j]);if(j&1)//位運算判斷偶數 cout<<endl;}cout<<endl;}return 0; }

運行結果:

就這?答案是387,420,489


3. 標題:乘積尾零
如下的10行數據,每行有10個整數,請你求出它們的乘積的末尾有多少個零?
5650 4542 3554 473 946 4114 3871 9073 90 4329
2758 7949 6113 5659 5245 7432 3051 4434 6704 3594
9937 1173 6866 3397 4759 7557 3070 2287 1453 9899
1486 5722 3135 1170 4014 5510 5120 729 2880 9019
2049 698 4582 4346 4427 646 9742 7340 1230 7683
5693 7015 6887 7381 4172 4341 2909 2027 7355 5649
6701 6645 1671 5978 2704 9926 295 3125 3878 6785
2066 4247 4800 1578 6652 4616 1113 6205 3264 2915
3966 5291 2904 1285 2193 1428 2265 8730 9436 7074
689 5510 8243 6114 337 4096 8199 7313 3685 211
注意:需要提交的是一個整數,表示末尾零的個數。不要填寫任何多余內容。

“==================手動分割============================”

1.這要是直接算肯定溢出。剛開始的想法是用棧之類的數據結構保存0,但是如果在未出現0之前數據已經溢出則會導致計算錯誤,畢竟int類型的數據所能表示的數實再是太小了。計算器啟動,唉,還是算了吧,Excel啟動。

2.考慮0結尾肯定是2或者5結尾的數字相乘,計算2或5結尾的數字中較少的那一個便可以計算0的個數。

int num_zeros() {int num[10][10];int num1=0,num2=0;for(int i=0;i<10;i++)for(int j=0;j<10;j++){cin>>num[i][j];if(num[i][j]%2==0)num1++;if(num[i][j]%5==0)num2++;}return min(num1,num2);}

運行結果:


4.標題:測試次數
x星球的居民脾氣不太好,但好在他們生氣的時候唯一的異常舉動是:摔手機。
各大廠商也就紛紛推出各種耐摔型手機。x星球的質監局規定了手機必須經過耐摔測試,并且評定出一個耐摔指數來,之后才允許上市流通。
x星球有很多高聳入云的高塔,剛好可以用來做耐摔測試。塔的每一層高度都是一樣的,與地球上稍有不同的是,他們的第一層不是地面,而是相當于我們的2樓。
如果手機從第7層扔下去沒摔壞,但第8層摔壞了,則手機耐摔指數=7。
特別地,如果手機從第1層扔下去就壞了,則耐摔指數=0。
如果到了塔的最高層第n層扔沒摔壞,則耐摔指數=n
為了減少測試次數,從每個廠家抽樣3部手機參加測試。
某次測試的塔高為1000層,如果我們總是采用最佳策略,在最壞的運氣下最多需要測試多少次才能確定手機的耐摔指數呢?
請填寫這個最多測試次數。

注意:需要填寫的是一個整數,不要填寫任何多余內容。

1.阿這,有必要嘛,不就扔個雞蛋的題目嘛,非要鄒出一個x星球摔手機阿。

2.考慮使用動態規劃。結果和兩個變量有關,一個是雞蛋的數量,另外一個是所需檢驗的樓數。當我有一個雞蛋,我可以在需要檢驗的樓層之間一層一層扔,假如在X層扔,碎了的狀態就變成雞蛋少一個,在1-X-1層扔。沒碎,雞蛋數目不變,在X以上層數開始扔,此時的樓數是M-X。再扔的步驟就變成了子問題了。問題結構類似,并且可以用到之前的結果可以使用動態規劃的方法。若用不到之間子問題的結果,可以考慮使用分治法。

轉移方程:

其中max是雞蛋咋扔咋不碎的最壞情況,求得便是最壞情況,故取最大值,min是如何扔雞蛋,從哪一層開始扔雞蛋,是扔雞蛋的方法,所以要選擇最優的方法。

考慮初始狀態:只有1個雞蛋,M層樓需要扔M次,只有一層樓需要扔1次。初始化時,將dp[i][j]設為j就可以了,這是最壞情況。

class Eggs{public:int getminStep(int eggNum,int floorNum){if(floorNum<1||eggNum<1)return 0;int dp[eggNum+1][floorNum+1];for(int i=1;i<eggNum+1;i++)for(int j=1;j<floorNum+1;j++)dp[i][j]=j;for(int n=2;n<eggNum+1;n++)for(int m=1;m<floorNum+1;m++)for(int k=1;k<=m;k++)dp[n][m]=min(dp[n][m],1+max(dp[n-1][k-1],dp[n][m-k]));return dp[eggNum][floorNum]; } };

運行結果:


5.
標題:快速排序。
以下代碼可以從數組a[]中找出第k小的元素。
它使用了類似快速排序中的分治算法,期望時間復雜度是O(N)的。
請仔細閱讀分析源碼,填寫劃線部分缺失的內容。#include <stdio.h> int quick_select(int a[], int l, int r, int k) {int p = rand() % (r - l + 1) + l; //隨機在r-l中選擇一個下標作為基準的下標int x = a[p]; //x為排序基準的元素{int t = a[p]; a[p] = a[r]; a[r] = t;} //將x與此趟排序最末元素a[r]交換位置,此時基準在最末int i = l, j = r; //用i,j記錄左右邊界的下標,作為雙指針while(i < j) {while(i < j && a[i] < x) i++; //從左起,找到第一個大于基準的數if(i < j) {a[j] = a[i];j--; //將這個大于基準的數與復制到右邊位置}while(i < j && a[j] > x) j--; //從右起,找到第一個小于基準的數,用原來的i的位置接收這個數if(i < j) {a[i] = a[j];i++;}}a[i] = x; //將基準換成x,至此第i號元素在第i-1個位置上p = i;if(i - l + 1 == k) return a[i];if(i - l + 1 < k) return quick_select(a,i+1,r,k-i+l-1 ); //填空else return quick_select(a, l, i - 1, k); } int main() {int a[] = {1, 4, 2, 8, 5, 7, 23, 58, 16, 27, 55, 13, 26, 24, 12};printf("%dn", quick_select(a, 0, 14, 5));return 0; }

注意:只填寫劃線部分缺少的代碼,不要抄寫已經存在的代碼或符號。

1.復習一下快排,快排基于分治法的思想,這里有一篇文章我覺得寫的很好。

god-jiang:神級基礎排序——快速排序?zhuanlan.zhihu.com

分治法可以用來解決某一個規模較大且能夠被分解成問題類似的子問題的問題,例如二分查找,對N個數字查找與對N/2個數字查找的問題是類似的,就可以利用分治法。而快速排序每一趟排序相當于定下了基準的位置,再對基準之前之后的數組進行排序。

下面上快排的代碼:

int partition(int arr[],int startIndex,int endIndex); void swap(int arr[],int i,int j);void quickSort(int arr[],int startIndex,int endIndex) {if(startIndex<endIndex){//找出基準 int partition=partition(arr,startIndex,endIndex);quickSort(arr,startIndex,partition-1);quickSort(arr,partition+1);} }int partition(int arr[],int startIndex,int endIndex) {int pivot=arr[startIndex];int left=startIndex;int right=endIndex;while(left!=right){while(arr[right]>pivot&&left<right)right--;while(arr[left]<pivot&&left<right)left++;if(left<right)swap(arr,left,right);}return left; }void swap(int i,int j) {arr[i]^=arr[j];arr[j]^=arr[i];arr[i]^=arr[j]; }
6.標題:遞增三元組
給定三個整數數組
A = [A1, A2, ... AN],
B = [B1, B2, ... BN],
C = [C1, C2, ... CN],
請你統計有多少個三元組(i, j, k) 滿足:
1. 1 <= i, j, k <= N
2. Ai < Bj < Ck
【輸入格式】
第一行包含一個整數N。
第二行包含N個整數A1, A2, ... AN。
第三行包含N個整數B1, B2, ... BN。
第四行包含N個整數C1, C2, ... CN。
對于30%的數據,1 <= N <= 100
對于60%的數據,1 <= N <= 1000
對于100%的數據,1 <= N <= 100000 0 <= Ai, Bi, Ci <= 100000
【輸出格式】
一個整數表示答案
【樣例輸入】
3
1 1 1
2 2 2
3 3 3
【樣例輸出】
27

“======================手動分割========================”

1.三重循環暴力找,暴力杯實至名歸。

int main() {int N;cin>>N;int A[N],B[N],C[N];for(int i=0;i<N;i++)cin>>A[i];for(int i=0;i<N;i++)cin>>B[i];for(int i=0;i<N;i++)cin>>C[i];int res=0;for(int i=0;i<N;i++)for(int j=0;j<N;j++)for(int k=0;k<N;k++)//if(A[i]<B[j]<C[k])//這里整錯了假如A[i]<B[j]不成立是0對于第三個數只要大于0即成立if(A[i]<B[j]&&B[j]<C[k]) res++; cout<<res;return 0; }

但是感覺不太好,時間復雜度是N^3。

如果以B中的元素作為基準,找出A和C第一個比B[i]大的元素,再通過公式計算個數,可以將時間復雜度降低到N^2。但是此時要建立在有序數組的基礎上,C自帶的sort函數復雜度也不會超過N^2,故總的復雜度還是N^2。

上代碼:

int main() {int N;cin>>N;int A[N+1],B[N+1],C[N+1];for(int i=1;i<=N;i++)cin>>A[i];for(int i=1;i<=N;i++)cin>>B[i];for(int i=1;i<=N;i++)cin>>C[i];sort(A,A+N);sort(B,B+N);sort(C,C+N);int j=1;int k=1;//維護雙指針 long long res=0;for(int i=1;i<=N;i++){while(j<=N&&A[j]<B[i])j++;while(k<=N&&C[k]<=B[i])k++;res+=(long long)(j-1)*(N-k+1); }cout<<res;return 0; }
7.標題:螺旋折線
如圖p1.png所示的螺旋折線經過平面上所有整點恰好一次。
對于整點(X, Y),我們定義它到原點的距離dis(X, Y)是從原點到(X, Y)的螺旋折線段的長度。
例如dis(0, 1)=3, dis(-2, -1)=9
給出整點坐標(X, Y),你能計算出dis(X, Y)嗎?
【輸入格式】
X和Y
【輸出格式】
輸出dis(X, Y)
【樣例輸入】0 1
【樣例輸出】3

1.我一開始的想法是用動態規劃做,但是找不到前后項之間的關系。后來上網看了題解。

先聽我細細道來,看不懂再看大佬的題解。

2.首先這個圖形繞來繞去,像是多個正方形嵌套,僅看第三象限的y=x的點,對(0,0)點向左下角翻折一次,(-1,-1)向左下角翻轉一次,每一次都得到一個與上一次得到的正方形邊長和相差8的正方形??梢钥紤]使用等差數列來計算。

3.可以分為兩種情況,y=x下方的點,可以用max(abs(x),abs(y))個等差的正方形減去與到y=x上的點的絕對值距離來計算。y=x上方的點,可以用max(abs(x),abs(y))個等差的正方形加上y=x上的點的絕對值距離來計算。

下面上代碼:

int max(int a,int b) {return (abs(a)>abs(b))?abs(a):abs(b);} int main() {int every_count=0;int all_count=0;int x,y;cin>>x>>y;int d=max(x,y);//計算有多少個正方形if(x>=y)//點在y=x下方,用前d個正方形減去(x,y)到(-d,-d)的距離{every_count=x-(-d)+y-(-d);all_count=8*d+d*(d-1)/2*8 -every_count;cout<<all_count<<endl;}else{//點在y=x上方,用前d-1個正方形加上(x,y)到(-d,-d)的距離every_count = x - (-d) + y - (-d);all_count = 8 * (d-1) + (d-2)*(d - 1) / 2 * 8 +every_count;cout << all_count << endl;}return 0; }

題解鏈接:

第九屆藍橋杯--螺旋折線 - Single_Dont - 博客園?www.cnblogs.com

運行結果:


8.標題:日志統計
小明維護著一個程序員論壇?,F在他收集了一份"點贊"日志,日志共有N行。其中每一行的格式是:
ts id
表示在ts時刻編號id的帖子收到一個"贊"。
現在小明想統計有哪些帖子曾經是"熱帖"。如果一個帖子曾在任意一個長度為D的時間段內收到不少于K個贊,小明就認為這個帖子曾是"熱帖"。
具體來說,如果存在某個時刻T滿足該帖在[T, T+D)這段時間內(注意是左閉右開區間)收到不少于K個贊,該帖就曾是"熱帖"。
給定日志,請你幫助小明統計出所有曾是"熱帖"的帖子編號。
【輸入格式】
第一行包含三個整數N、D和K。
以下N行每行一條日志,包含兩個整數ts和id。
【輸出格式】
按從小到大的順序輸出熱帖id。每個id一行。
【輸入樣例】
7 10 2
0 1
0 10
10 10
10 1
9 1
100 3
100 3
【輸出樣例】
1
3

可以考慮將每一篇帖子點贊的時刻按照從小到大排列,然后用尺取法,在長度為k的區間在其上滑動與d作比較,從而得出結果。

本題需要考慮的是如何將雜亂無章的輸入數據按照帖子序號整理以及尺取法判斷條件??紤]使用含有ts和id的結構體表示每篇帖子點贊的狀態。再用vector<int> v[MAX_N]按順序整理帖子點贊數。例如v[i]為第i篇帖子點贊情況。此外還需要構造sort函數中對結構體比較的函數。下面上代碼:

struct Node{int ts;int id; };vector<int> v[10000]; Node no[10000];void solve(int k,int d,int x) {int l=0,r=-1;r+=k;while(r<len){if(v[x][r]<v[x][l]+d){//d時刻內能否得k個贊 cout<<x<<endl;break;}else{r++;l++;}}void cmp(node a,node b) {return a.ts<b.ts; }int main() {int n,d,k;cin>>n>>d>>k;for(int i=0;i<n;i++)cin>>no[i].ts>>no[i].id;sort(no,no+n,cmp);for(int i=0;i<n;i++)v[no[i].id]=no[i].ts;solve(int k,int d,int x);return 0; }

總結

以上是生活随笔為你收集整理的problem b: 一年中的第几天_第九届蓝桥杯B组试题的全部內容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: 激情免费网站 | 91午夜免费视频 | 夜色88v精品国产亚洲 | 午夜久久久久久久久久久 | 另类二区 | 野外(巨肉高h) | 国产又大又黄又爽 | 操碰视频在线 | 99免费在线观看视频 | 欧美经典一区二区三区 | 日本欧美在线播放 | 日韩免费二区 | 亚洲av无码国产精品久久不卡 | 中文字幕国产综合 | 手机av在线不卡 | 大尺度舌吻呻吟声 | wwwxxxx日本 | 国产精品久久久久久久免费看 | 国产精品999. | 五月婷婷社区 | 99re久久精品国产 | 黄色av一级片 | av小说免费在线观看 | 日本在线视频不卡 | 天天干天天爱天天射 | 欧美1区2区3区4区 | 成人免费在线 | 国产精品一区二区欧美 | av中文网| 乌克兰毛片 | 日本一级做a爱片 | 欧美日韩电影一区二区 | 美女被出白浆 | 热播之家 | 色综合久久中文字幕无码 | 91情侣在线| 少妇高潮一区二区三区99 | 青青视频一区二区 | 免费在线观看黄色网址 | 美女扒开让男人桶爽 | 蜜臀va| 成人在线不卡视频 | 日本视频一区二区 | 在线观看小视频 | 日韩欧美在线视频观看 | 欧美1234区| 精品久久久久一区二区国产 | 成人午夜天 | 爱爱福利社| 亚洲国产精品成人综合 | 日本久久综合网 | 丰满人妻妇伦又伦精品国产 | 久久久久综合 | a级黄片毛片| 岛国av免费在线观看 | yjizz视频| 成人精品一区二区三区 | youjizz日本人| 亚洲av永久一区二区三区蜜桃 | 伊人网国产 | 欧美精品综合 | 亚洲风情av | 丁香五色月 | 韩国女主播一区二区 | 亚洲综合久 | 一区二区视频在线播放 | 爱av导航 | 亚洲乱码久久 | 欧美精品国产一区 | 中文字幕人妻丝袜乱一区三区 | 99精品视频在线播放免费 | 国产精品一品二区三区的使用体验 | 小少妇哺乳喂奶播放 | 日韩中文字幕视频在线观看 | 亚洲av不卡一区二区 | 封神榜二在线高清免费观看 | 一区二区视频网站 | 手机看片福利永久 | 日本免费一二三区 | 花房姑娘免费全集 | 中文字幕乱码人妻无码久久95 | 人人妻人人澡人人爽欧美一区 | 一级aa毛片 | 天堂在线网 | 亚洲精品中文字幕乱码三区 | 日韩 欧美 精品 | 91精品婷婷国产综合久久蝌蚪 | 国产suv精品一区二区33 | 健身教练巨大粗爽gay视频 | 无码精品人妻一二三区红粉影视 | 人妻激情偷乱视频一区二区三区 | 国产情侣一区二区 | 一区二区在线免费 | 日韩av成人在线 | 国产精品国产精品国产专区不卡 | 一级免费看 | 在线v| 国产一级淫片a | 成人手机在线观看 |