【藍(lán)橋杯】第十四屆模擬賽第一期及第二期填空匯總-創(chuàng)新互聯(lián)

目錄

彭州網(wǎng)站建設(shè)公司成都創(chuàng)新互聯(lián),彭州網(wǎng)站設(shè)計(jì)制作,有大型網(wǎng)站制作公司豐富經(jīng)驗(yàn)。已為彭州上千余家提供企業(yè)網(wǎng)站建設(shè)服務(wù)。企業(yè)網(wǎng)站搭建\成都外貿(mào)網(wǎng)站建設(shè)要多少錢,請找那個售后服務(wù)好的彭州做網(wǎng)站的公司定做!

1.A題(進(jìn)制位數(shù))

位運(yùn)算符

第一期

問題描述

解析

第二期

解析

代碼

2.B題(日期問題)

第一期

問題描述

解析

代碼實(shí)現(xiàn)

執(zhí)行結(jié)果

第二期

問題描述

解析

3.C題(數(shù)學(xué)問題)

第一期

問題描述

解析

代碼實(shí)現(xiàn)

執(zhí)行結(jié)果

第二期

問題描述

解析

4.D題(矩陣問題)

第一期

問題描述

解析

代碼實(shí)現(xiàn)

第二期

問題描述

解析

5.E題(拆分問題)

第一期

問題描述

解析

第二期

問題描述

解析

總結(jié)


1.A題(進(jìn)制位數(shù)) 位運(yùn)算符
符號描述運(yùn)算規(guī)則
&兩個位都為1時,結(jié)果才為1
|兩個位都為0時,結(jié)果才為0
^異或兩個位相同為1,相異為0
~取反0變1,1變0
<<左移各二進(jìn)位全部左移若干位,高位丟棄,低位補(bǔ)0
>>右移各二進(jìn)位全部右移若干位,對無符號數(shù),高位補(bǔ)0,有符號數(shù),各編譯器處理方法不一樣,有的補(bǔ)符號位(算術(shù)右移),有的補(bǔ)0(邏輯右移)
第一期 問題描述

十進(jìn)制整數(shù)?2?在十進(jìn)制中是?1?位數(shù),在二進(jìn)制中對應(yīng)?10?,是?2?位數(shù)。

十進(jìn)制整數(shù)?22?在十進(jìn)制中是?2?位數(shù),在二進(jìn)制中對應(yīng)?10110?,是?5?位數(shù)。

請問十進(jìn)制整數(shù)?2022?在二進(jìn)制中是幾位數(shù)?

解析

根據(jù)常識2^10為1024,那么2^11就是2048,2048>2022,即2^10<2022<2^11。

由2<3<2^2,為兩位數(shù);2^4<22<2^5,為五位數(shù)可知2022的位數(shù)為10+1即11位。

答案:11位。

第二期

請找到一個大于 2022 的最小數(shù),這個數(shù)轉(zhuǎn)換成二進(jìn)制之后,最低的 6 個二進(jìn)制為全為 0 。
請將這個數(shù)的十進(jìn)制形式作為答案提交。

解析

2022聯(lián)想到2048(100000000000),for循環(huán)從2023開始,找到那個大于 2022 的最小數(shù)結(jié)束,判斷方法:對該整數(shù)進(jìn)行六次右移如果每一次的&(與)1都不為1,即最低的 6 個二進(jìn)制為全為 0,那么這個數(shù)就是那個大于 2022 的最小數(shù)。

答案:2048。

代碼
#includeusing namespace std;

int main() {
	int s;

	for (int i = 2023;; i++) {
		bool flag = false;
		for (int k = 0; k< 6; k++) {
			if (i >>k & 1) {
				flag = true;
				continue;
			}
		}

		if (!flag) {
			s = i;
			break;
		}
	}

	cout<< s<< endl;
	return 0;
2.B題(日期問題) 第一期 問題描述

小藍(lán)每周六、周日都晨跑,每月的?1、11、21、31?日也晨跑。其它時間不晨跑。

已知?2022?年?1?月?1 日是周六,請問小藍(lán)整個?2022?年晨跑多少天?

解析

由題意可知小藍(lán)周末跑,日期位數(shù)為1的時候也跑。假設(shè)定義x為365天的某一天,那么小藍(lán)周末跑的條件就是x%7==1為周六或x%7==1為周日,定義一個數(shù)組,每個元素代表著每個月份的日期,用枚舉法判斷日期是否為1、11、21、31 ,用count計(jì)算晨跑的天數(shù),x隨著循環(huán)加1,滿足x%7==1或x%7==1或判斷日期是否為1、11、21、31之一,count加1。

答案:138。

代碼實(shí)現(xiàn)
#include#includeint main(int argc, char *argv[])
{
  	int x = 0, count = 0;
	int month[13] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};

	for (int i = 1; i< 13; i++) {
		for (int j = 1; j<= month[i]; j++) {
			x++;

			if (x % 7 == 1 || x % 7 == 2 || j == 1 || j ==  11 || j == 21 || j == 31) {
				count++;
			}
		}
	}

	printf("%d", count);
}

雖然月份是12個,但是數(shù)組定義為13個,把第一個賦值為0,使用時從第二個元素開始,也就是下標(biāo)為1代表著一月,這樣便于理解

執(zhí)行結(jié)果

第二期 問題描述

我們計(jì)從 1949 年 10 月 1 日至 1949 年 10 月 2 日為經(jīng)過了 1 天。請問從 1949 年 10 月 1 日至 2022 年 1 月 1 日經(jīng)過了多少天?

解析

分兩段算,先計(jì)算1949 年 10 月 1 日到1950?年 1?月 1 日為31+30+31=92,在計(jì)算1950?年 1?月 1 日到2022 年 1 月 1 日,用for循環(huán),判斷是否為閏年,如果為閏年加366,不是閏年加365。最后兩者相加即為答案。

答案:26390

代碼

#include "stdio.h"

int main() {
	int sum = 92;

	for (int i = 1950; i< 2022; i++) {
		if (i % 4 == 0 && i % 100 != 0 || i % 400 == 0) {
			sum += 366;
		} else {
			sum += 365;
		}
	}

	printf("%d", sum);
	return 0;
}
3.C題(數(shù)學(xué)問題) 第一期 問題描述

小藍(lán)特別喜歡調(diào)和級數(shù)?S(n)=1/1+1/2+1/3+...+1/n

請問,n?至少為多大時,S(n)>12??

解析

直接暴力累加計(jì)算,需要注意的是結(jié)果涉及到了循環(huán)的++運(yùn)算

  • S>0 n=1
  • S>1 n=2
  • S>2 n=4
  • S>3 n=11
  • S>4 n=31
  • S>5 n=83
  • S>6 n=227
  • S>7 n=616
  • S>8 n=1674
  • S>9 n=4550
  • S>10 n=12367
  • S>11 n=33617
  • S>12 n=91380

答案:91380

代碼實(shí)現(xiàn)
#include#includeint main(int argc, char *argv[])
{
  	double sum = 0;
	int i;

	for (i = 1; sum<= 12; i++) {
		sum += 1.0 / i;
	}

	printf("%d", i - 1);
  return 0;
}

切記,切記,切記,最后輸出n的時候要減1,因?yàn)樵谧詈笠淮窝h(huán)的結(jié)尾i又加1,而不滿足條件的是i加1之前的值

執(zhí)行結(jié)果

第二期 問題描述

8518 是一個非常特殊的數(shù),如果把這個數(shù)看成 16 進(jìn)制數(shù),它的值為 (8518)16=8*16*16*16+5*16*16+1*16+8=34072,而 34072 正好是 8518 的整數(shù)倍。9558 也是這樣一個數(shù),當(dāng)看成 16 進(jìn)制時是 38232。其實(shí)長度為 1 的數(shù) 0 到 9 都滿足看成 16 進(jìn)制后是自己的整數(shù)倍(1倍)。請問,除開長度為 1 的數(shù),最小的滿足這樣條件的數(shù)是多少?

解析

for循環(huán)從10開始往后枚舉,直到找到滿足條件的數(shù)結(jié)束,判斷方法:現(xiàn)將該數(shù)轉(zhuǎn)換為十六進(jìn)制(對其求余每次除10從尾數(shù)求其位數(shù),權(quán)重每循環(huán)一次乘以16,位數(shù)乘權(quán)重累加),最后在用這個數(shù)求余它本身10進(jìn)制的數(shù),如果為0,這滿足,反之,繼續(xù)循環(huán)。

答案:1038

代碼

#includeusing namespace std;


int main() {
	int res;

	for (int i = 10;; i++) {
		int weight = 1;
		int ans = 0, sum = 0;
		int temp = i;

		while (temp) {
			sum = temp % 10;
			ans += sum * weight;
			weight *= 16;
			temp /= 10;
		}

		if (ans % i == 0) {
			res = i;
			break;
		}
	}

	cout<< res<< endl;
	return 0;
}
4.D題(矩陣問題) 第一期 問題描述

給定一個字母矩陣,如果矩陣中的某個位置不在四條邊上,而且該位置上的字母小于其上下左右四個位置的字母,則稱為一個山谷。

例如,對于如下矩陣

DDDDD

CADCE

FFFFA

共有兩個山谷,位于第二行第二列和第四列。請注意第二行第三列和第三行第五列都不是山谷。

對于如下?3030?行?6060?列的字母矩陣,請問有多少個山谷?

PHQGHUMEAYLNLFDXFIRCVSCXGGBWKFNQDUXWFNFOZVSRTKJPREPGGXRPNRVY STMWCYSYYCQPEVIKEFFMZNIMKKASVWSRENZKYCXFXTLSGYPSFADPOOEFXZBC OEJUVPVABOYGPOEYLFPBNPLJVRVIPYAMYEHWQNQRQPMXUJJLOOVAOWUXWHMS NCBXCOKSFZKVATXDKNLYJYHFIXJSWNKKUFNUXXZRZBMNMGQOOKETLYHNKOAU GZQRCDDIUTEIOJWAYYZPVSCMPSAJLFVGUBFAAOVLZYLNTRKDCPWSRTESJWHD IZCOBZCNFWLQIJTVDWVXHRCBLDVGYLWGBUSBMBORXTLHCSMPXOHGMGNKEUFD XOTOGBGXPEYANFETCUKEPZSHKLJUGGGEKJDQZJENPEVQGXIEPJSRDZJAZUJL LCHHBFQMKIMWZOBIWYBXDUUNFSKSRSRTEKMQDCYZJEEUHMSRQCOZIJIPFION EEDDPSZRNAVYMMTATBDZQSOEMUVNPPPSUACBAZUXMHECTHLEGRPUNKDMBPPW EQTGJOPARMOWZDQYOXYTJBBHAWDYDCPRJBXPHOOHPKWQYUHRQZHNBNFUVQNQ QLRZJPXIOGVLIEXDZUZOSRKRUSVOJBRZMWZPOWKJILEFRAAMDIGPNPUUHGXP QNJWJMWAXXMNSNHHLQQRZUDLTFZOTCJTNZXUGLSDSMZCNOCKVFAJFRMXOTHO WKBJZWUCWLJFRIMPMYHCHZRIWKBARXBGFCBCEYHJUGIXWTBVTREHBBCPXIFB XVFBCGKCFQCKCOTZGKUBMJRMBSZTSSHFROEFWSJRXJHGUZYUPZWWEIQURPIX IQFLDUUVEOOWQCUDHNEFNJHAIMUCZFSKUIDUBURISWTBRECUYKABFCVKDZEZ TOIDUKUHJZEFCZZZBFKQDPQZIKFOBUCDHTHXDJGKJELRLPAXAMCEROSWITDP TPCCLIFKELJYTIHRCQAYBNEFXNXVGZEDYYHNGYCDRUDMPHMECKOTRWOSPOFG HFOZQVLQFXWWKMFXDYYGMDCASZSGOVSODKJGHCWMBMXRMHUYFYQGAJQKCKLZ NAYXQKQOYZWMYUBZAZCPKHKTKYDZIVCUYPURFMBISGEKYRGZVXDHPOAMVAFY RARXSVKHTQDIHERSIGBHZJZUJXMMYSPNARAEWKEGJCCVHHRJVBJTSQDJOOTG PKNFPFYCGFIEOWQRWWWPZSQMETOGEPSPXNVJIUPALYYNMKMNUVKLHSECDWRA CGFMZKGIPDFODKJMJQWIQPUOQHIMVFVUZWYVIJGFULLKJDUHSJAFBTLKMFQR MYJFJNHHSSQCTYDTEAMDCJBPRHTNEGYIWXGCJWLGRSMEAEARWTVJSJBAOIOJ LWHYPNVRUIHOSWKIFYGTYDHACWYHSGEWZMTGONZLTJHGAUHNIHREQGJFWKJS MTPJHAEFQZAAULDRCHJCCDYRFVVRIVUYEEGFIVDRCYGURQDREDAKUBNFGUPR OQYLOBCWQXKZMAUSJGMHCMHGDNMPHNQKAMHURKTRFFACLVGRZKKLDACLLTEO JOMONXRQYJZGINRNNZWACXXAEDRWUDXZRFUSEWJTBOXVYNFHKSTCENAUMNDD XFDMVZCAUTDCCKXAAYDZSXTTOBBGQNGVVPJGOJOGLMKXGBFCPYPCKQCHBDDZ WRXBZMQRLXVOBTWHXGINFGFRCCLMZNMJUGWWBSQFCIHUBSJOLLMSQSGHMCPH ELSOTFLBGSFNPCUZSRUPCHYNVZHCPQUGRIWNIQXDFJPWPXFBLKPNPEELFJMT

解析

枚舉法判斷每個字符與該字符上下左右四個位置的字母的大小,如果該位置上的字母小于其上下左右四個位置的字母那么計(jì)數(shù)變量count++。

答案:276

代碼實(shí)現(xiàn)
#includeusing namespace std;

int main() {
	char str[30][60];
	int count = 0;

	for (int i = 0; i< 30; i++) {
		for (int j = 0; j< 60; j++) {
//			scanf("%c", &str[i][j]);
			cin >>str[i][j];
		}
	}

	printf("\n");

	for (int i = 0; i< 30; i++) {
		for (int j = 0; j< 60; j++) {
			printf("%c", str[i][j]);
		}
	}

	for (int i = 1; i< 29; i++) {
		for (int j = 1; j< 59; j++) {
			if (str[i - 1][j] >str[i][j] && str[i + 1][j] >str[i][j] && str[i][j - 1] >str[i][j] && str[i][j + 1] >str[i][j]) {
				count++;
			}
		}
	}

	printf("%d", count);
	return 0;
}

輸入流cin無論什么情況下都會忽略tab、空格、回車等分隔符

scanf函數(shù)在除scanf("%c",&char)之外的所有情況都不會把回車符作為輸入字符在輸入緩存中讀取,但scanf("%c",&char)也不會讀取tab、空格,而是把他們作為分隔符在輸入緩存中忽略。

第二期 問題描述

小藍(lán)有一個 30 行 60 列的數(shù)字矩陣,矩陣中的每個數(shù)都是 0 到 9 之間的數(shù)字?,F(xiàn)在小藍(lán)想從這個矩陣的第一行第一列畫一條折線到第 30 行 60 列,線只能沿水平向右走或豎直向下走,只能在有數(shù)字的地方拐彎。小藍(lán)想知道,這樣一條線經(jīng)過的數(shù)字的和大是多少。

174094882455171152761423221685761892795431233411387427793198
650286024865090061389344606618496378829135984076361542097372
601657541200146071777733599818266038012509478351201640618984
143988087783837107349651099683484992553337438088068198972282
890781586124258626539246182119762952003918195325258677229419
698255491250839396799769357665825441616335532825361862146291
503649293440596342887581257444442930778730382520372975343211
325351222640703400531067500454956482168314849207060705673849
265774579830223671554026061117300483012903885770893074783710
083450145620356667677191627276513995926532444279237315785832
411595106453089134746365281031552217482363035280722591085079
053410485925413958279617719034175332412908745680774313630190
429314820559328748143552689295945058801322270313370955837837
939182801848609300876356583948397645861551964542532682663945
625356614462682551015176002433628234343684739800880514363921
982340231989891351425389287014819359798014755509282450440511
590838726938103384801541373585690893606978941566666714061214
952341523168827712604946036245881214982452998386986623826275
782780208928205527678781609589000725521486468983551558405472
149903035076783644195574734088152324666290493119955560594634
905391288186024902215444250421277955403412298227858394469856
607272647132163832860126054679347881638761723785858733108109
249157334220127702410373959720286708183036202841837581704881
367895556630088230650972282944827258473951902831431040790814
079538232104075905120989173307660289899942087873076421916033
622143260549608274076012938515668898707915863945382394851328
164677964192631597026176253407553188801750590935427267220117
591817866992665840378311257621611574856498432538327068011953
631534031790352912617015229051836886166704989498756486878095
690013558017746707412183571476823027885971347137127534455141

解析

線性DP,狀態(tài)計(jì)算為:f[i,j]=max(max(f[i - 1][j], f[i][j - 1])) + v,v是該點(diǎn)的權(quán)值。答案為f[30][60]。

答案:597

代碼

#includeusing namespace std;
const int N = 35, M = 65;
int f[N][M];
char s[N][M];

int main() {
	for (int i = 1; i<= 30; i++)
		scanf("%s", s[i] + 1);

	for (int i = 1; i<= 30; i++)
		for (int j = 1; j<= 60; j++)
			f[i][j] = max(f[i - 1][j], f[i][j - 1]) + s[i][j] - '0';

	cout<< f[30][60]<< endl;
	return 0;
}
5.E題(拆分問題) 第一期 問題描述

小藍(lán)有一個?100?行?100?列的矩陣,矩陣的左上角為?1。其它每個位置正好比其左邊的數(shù)大?2,比其上邊的數(shù)大?1?。

例如,第?1?行第?2?列為?3,第?2?行第?2?列 為?4,第?10?行第?20?列為?48。

小藍(lán)想在矩陣中找到一個由連續(xù)的若干行、連續(xù)的若干列組成的子矩陣,使得其和為?2022,請問這個子矩陣中至少包含多少個元素(即子矩陣的行數(shù)和列數(shù)的乘積)。

解析

首先我們要構(gòu)造出這個矩陣, 假設(shè)這個矩陣為?a[ ][ ]。

  • 矩陣的左上角為?1, 那么?a[1][1] = 1。
  • 其它每個位置正好比其左邊的數(shù)大?2,我們可以構(gòu)造出第一行?a[1][i] = a[1][i - 1] + 2
  • 其它每個位置正好比其上面的數(shù)大?1,根據(jù)第一行可以構(gòu)造出其他?9行?a[i][j] = a[i - 1][j - 1] + 1

我們要求一個子矩陣的和,考慮到矩陣長寬只有?100,我們可以通過枚舉子矩陣的左上角?(i, j)以及右下角?(k, l),我們用最簡單的四重循環(huán)來枚舉,此時枚舉的復(fù)雜度為O(n^4), 若此時和為?2022?矩陣的元素個數(shù)等于行數(shù)和列數(shù)的乘積,即(k?i+1)×(l?j+1), 對所有枚舉結(jié)果取最小值。

查詢子矩陣的和是否為?2022我們可以通過預(yù)處理二維前綴和O(1)查詢。

答案:12

代碼

#includeusing namespace std;
int a[150][150] , sum[150][150];
int cal(int x1, int y1, int x2, int y2){
    return sum[x2][y2] - sum[x2][y1 - 1] - sum[x1 - 1][y2] + sum[x1 - 1][y1 - 1];
}
signed main()
{
    a[1][1] = 1;
    for(int i = 2;i<= 100;i++) a[1][i] = a[1][i - 1] + 2;
    for(int i = 2;i<= 100;i++)
        for(int j = 1;j<= 100;j++)
            a[i][j] = a[i - 1][j] + 1;
    for(int i = 1;i<= 100;i++){
        for(int j = 1;j<= 100;j++)
            sum[i][j] = sum[i][j - 1] + a[i][j];
        for(int j = 1;j<= 100;j++)
            sum[i][j] += sum[i - 1][j];
    }
    int ans = 100 * 100;
    for(int i = 1;i<= 100;i++)
        for(int j = 1;j<= 100;j++)
            for(int k = i;k<= 100;k++)
                for(int l = j;l<= 100;l++)
                    if(cal(i, j, k, l) == 2022)
                        ans = min(ans,(k - i + 1) * (l - j + 1));                    
    cout<< ans<< '\n';
    return 0;
}
第二期 問題描述

將 2022 拆分成不同的質(zhì)數(shù)的和,請問最多拆分成幾個?

解析

求出2~2022的質(zhì)數(shù),把它看成一個0-1背包問題的話,每一個質(zhì)數(shù)看做一個物品,質(zhì)數(shù)的大小為物品質(zhì)量,重質(zhì)量不超出2022,最多能裝多少個質(zhì)數(shù)。

答案:33

代碼

#includeusing namespace std;
const int N = 2030;
int f[N][N];
int primes[N];//2~2022的質(zhì)數(shù)
int n;
int cnt = 1;//質(zhì)數(shù)的個數(shù)

bool isprime(int n) {
	for (int i = 2; i<= n / i; i++)
		if (n % i == 0)
			return false;

	return true;
}//判斷是否為質(zhì)數(shù)(素數(shù))

int main() {
	for (int i = 2; i<= 2022; i++)
		if (isprime(i))
			primes[cnt++] = i;

	for (int i = 1; i< cnt; i++)
		for (int j = 2; j<= 2022; j++) {
			if (primes[i] >j)
				f[i][j] = f[i - 1][j];
			else
				f[i][j] = max(f[i - 1][j], f[i - 1][j - primes[i]] + 1);
		}

	cout<< f[cnt - 1][2022]<< endl;
	return 0;
}
總結(jié)

多練習(xí)進(jìn)制問題、日期問題(圍繞2022~2023)、數(shù)學(xué)問題、矩陣問題、拆分問題,

熟練掌握枚舉、動態(tài)規(guī)劃、0-1背包問題等等。

👍+??+??是對博主大的鼓勵與支持?。。?/p>

你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級服務(wù)器適合批量采購,新人活動首月15元起,快前往官網(wǎng)查看詳情吧

當(dāng)前標(biāo)題:【藍(lán)橋杯】第十四屆模擬賽第一期及第二期填空匯總-創(chuàng)新互聯(lián)
標(biāo)題鏈接:http://www.muchs.cn/article46/dssdhg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站排名、標(biāo)簽優(yōu)化企業(yè)網(wǎng)站制作、網(wǎng)站設(shè)計(jì)移動網(wǎng)站建設(shè)、云服務(wù)器

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

網(wǎng)站托管運(yùn)營