【Week 11 作业】必做题
Week 11 必做題
- A 必做題 1
- 題目描述
- 輸入格式
- 輸出格式
- 輸入樣例
- 輸出樣例
- 思路
- 代碼
- B 必做題 2
- 題目描述
- 輸入格式
- 輸出格式
- 數(shù)據(jù)范圍
- 樣例輸入
- 樣例輸出
- 思路
- 代碼
- C 必做題 3
- 題目描述
- 輸入格式
- 輸出格式
- 樣例輸入
- 樣例輸出
- 思路
- 代碼
- D 必做題 4
- 題目描述
- 輸入格式
- 輸出格式
- 樣例
- 樣例輸入1
- 樣例輸出1
- 樣例輸入2
- 樣例輸出2
- 樣例輸入3
- 樣例輸出3
- 思路
- 代碼
A 必做題 1
題目描述
蒜頭君從現(xiàn)在開(kāi)始工作,年薪 N 萬(wàn)。他希望在蒜廠附近買一套 60 平米的房子,現(xiàn)在價(jià)格是 200 萬(wàn)。假設(shè)房子價(jià)格以每年百分之 K 增長(zhǎng),并且蒜頭君未來(lái)年薪不變,且不吃不喝,不用交稅,每年所得 N 萬(wàn)全都積攢起來(lái),問(wèn)第幾年能夠買下這套房子?(第一年年薪 N 萬(wàn),房?jī)r(jià) 200 萬(wàn))
輸入格式
一行,包含兩個(gè)正整數(shù) N(10≤N≤50),K(1≤K≤20),中間用單個(gè)空格隔開(kāi)。
輸出格式
如果在第 20 年或者之前就能買下這套房子,則輸出一個(gè)整數(shù) M,表示最早需要在第 M 年能買下;否則輸出"Impossible"。輸出時(shí)每行末尾的多余空格,不影響答案正確性
輸入樣例
50 10輸出樣例
8思路
從第一年開(kāi)始循環(huán)計(jì)算當(dāng)年總收入與當(dāng)年的房?jī)r(jià),直到年數(shù)超過(guò)20年或者總收入大于房?jī)r(jià)停止循環(huán)。
循環(huán)結(jié)束后,若年數(shù)小于20,說(shuō)明在20年內(nèi)某一年總收入大于房?jī)r(jià),則輸出年數(shù)即可,若年數(shù)大于20,則說(shuō)明20年內(nèi)每一年房?jī)r(jià)都比總收入大,則輸出“Impossible”。
代碼
#include <iostream> using namespace std; int N,K; int main(int argc, char** argv) {scanf("%d%d",&N,&K);int i=1;int sum=N;double pay=200;while(i<=20&&sum<pay){i++;sum+=N;pay+=(pay/100)*K;}if(i<=20)printf("%d\n",i);elseprintf("Impossible\n");return 0; }B 必做題 2
題目描述
蒜頭君的班級(jí)里有 n^2 個(gè)同學(xué),現(xiàn)在全班同學(xué)已經(jīng)排列成一個(gè) n?n 的方陣。
但是老師卻臨時(shí)給出了一組新的列隊(duì)方案。
為了方便列隊(duì),所以老師只關(guān)注這個(gè)方陣中同學(xué)的性別,不看具體的人是誰(shuí)這里我們用 0 表示男生,用 1 表示女生。
現(xiàn)在蒜頭君告訴你同學(xué)們已經(jīng)排好的方陣是什么樣的,再告訴你老師希望的方陣是什么樣的,他想知道同學(xué)們已經(jīng)列好的方陣能否通過(guò)順時(shí)針旋轉(zhuǎn)變成老師希望的方陣
1、不需要旋轉(zhuǎn)則輸出 0
2、順時(shí)針旋轉(zhuǎn) 90° 則輸出 1
3、順時(shí)針旋轉(zhuǎn) 180° 則輸出 2
4、順時(shí)針旋轉(zhuǎn) 270° 則輸出 3
若不滿足以上四種情況則輸出 ?1若滿足多種情況,則輸出較小的數(shù)字。
輸入格式
第一行為一個(gè)整數(shù) n
接下來(lái)的 n 行同學(xué)們已經(jīng)列好的 01 方陣;
再接下來(lái)的 n 行表示老師希望的的 01 方陣。
輸出格式
輸出僅有一行,該行只有一個(gè)整數(shù),如題所示。
數(shù)據(jù)范圍
對(duì)于 100% 的數(shù)據(jù)中,1≤n≤20,輸出時(shí)每行末尾的多余空格,不影響答案正確性
樣例輸入
4 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0樣例輸出
1思路
首先將輸入保存到兩個(gè)數(shù)組之中,接下來(lái)就是如何旋轉(zhuǎn)數(shù)組。
對(duì)數(shù)組進(jìn)行90°,180°,270°旋轉(zhuǎn)后的結(jié)果,可看成是更改一下數(shù)組每個(gè)數(shù)的下標(biāo),因此我們可以直接改變數(shù)組的遍歷方式,已到達(dá)與旋轉(zhuǎn)相同的效果,如旋轉(zhuǎn)90°,即將n列反向后變成第n行,因此改成從第一列的最后一個(gè)向上遍歷,從第一列向后遍歷即可…依據(jù)這種思想,我們可直接使用原始數(shù)組,對(duì)要旋轉(zhuǎn)的數(shù)組采用不同的遍歷方式來(lái)與目標(biāo)數(shù)組(目標(biāo)數(shù)組采用普通的遍歷方式即可)比較即可判斷旋轉(zhuǎn)后是否匹配。
代碼
#include <iostream> using namespace std; const int Size=20+5; int s[Size][Size]; int t[Size][Size]; int N; bool r0() {for(int i=1;i<=N;i++)for(int j=1;j<=N;j++)if(s[i][j]!=t[i][j])return false;return true; } bool r90() {for(int i=1;i<=N;i++)for(int j=1;j<=N;j++)if(t[i][j]!=s[N-j+1][i])return false;return true; } bool r180() {for(int i=1;i<=N;i++)for(int j=1;j<=N;j++)if(t[i][j]!=s[N-i+1][N-j+1])return false;return true; } bool r270() {for(int i=1;i<=N;i++)for(int j=1;j<=N;j++)if(t[i][j]!=s[j][N-i+1])return false;return true; } int main(int argc, char** argv) {scanf("%d",&N);for(int i=1;i<=N;i++)for(int j=1;j<=N;j++)scanf("%d",&s[i][j]);for(int i=1;i<=N;i++)for(int j=1;j<=N;j++)scanf("%d",&t[i][j]);int flag=-1;if(r0())flag=0;else if(r90())flag=1;else if(r180())flag=2;else if(r270())flag=3;printf("%d\n",flag);return 0; }C 必做題 3
題目描述
Julius Caesar 曾經(jīng)使用過(guò)一種很簡(jiǎn)單的密碼。對(duì)于明文中的每個(gè)字符,將它用它字母表中后 5 位對(duì)應(yīng)的字符來(lái)代替,這樣就得到了密文。比如字符’A’用’F’來(lái)代替。如下是密文和明文中字符的對(duì)應(yīng)關(guān)系。
密文
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z明文
V W X Y Z A B C D E F G H I J K L M N O P Q R S T U
你的任務(wù)是對(duì)給定的密文進(jìn)行解密得到明文。你需要注意的是,密文中出現(xiàn)的字母都是大寫字母。密文中也包括非字母的字符,對(duì)這些字符不用進(jìn)行解碼。
輸入格式
一行,給出密文,密文不為空,而且其中的字符數(shù)不超過(guò) 200。
輸出格式
輸出一行,即密文對(duì)應(yīng)的明文。
輸出時(shí)每行末尾的多余空格,不影響答案正確性
樣例輸入
NS BFW, JAJSYX TK NRUTWYFSHJ FWJ YMJ WJXZQY TK YWNANFQ HFZXJX樣例輸出
IN WAR, EVENTS OF IMPORTANCE ARE THE RESULT OF TRIVIAL CAUSES思路
首先將密文讀入到一個(gè)char數(shù)組之中,遍歷每一個(gè)字符,若其為大寫字母則需轉(zhuǎn)換為明文,這里密文轉(zhuǎn)明文是一種類似環(huán)狀結(jié)構(gòu)中向前移5的操作,若該字符在F之后,則直接減5即可,若其在F之前,則同樣需向前減5,不過(guò)小于A的時(shí)候需轉(zhuǎn)到Z來(lái)操作。
代碼
#include <iostream> #include<string.h> using namespace std; const int size=200+10; char str[size]; int main(int argc, char** argv) {while(scanf("%[^\n]",str)!=EOF){int len=strlen(str);for(int i=0;i<len;i++){if(str[i]>='A'&&str[i]<='Z'){if(str[i]>='F')str[i]=str[i]-5;else{str[i]='Z'-(5-(str[i]-'A'+1));}}}for(int i=0;i<len;i++)printf("%c",str[i]);printf("\n");getchar();}return 0; }D 必做題 4
題目描述
東東和他的女朋友(幻想的)去壽司店吃晚餐(在夢(mèng)中),他發(fā)現(xiàn)了一個(gè)有趣的事情,這家餐廳提供的 n 個(gè)的壽司被連續(xù)的放置在桌子上 (有序),東東可以選擇一段連續(xù)的壽司來(lái)吃。
東東想吃鰻魚(yú),但是東妹想吃金槍魚(yú)。核 平 起 見(jiàn),他們想選擇一段連續(xù)的壽司(這段壽司必須滿足金槍魚(yú)的數(shù)量等于鰻魚(yú)的數(shù)量,且前一半全是一種,后一半全是另外一種)我們用1代表鰻魚(yú),2代表金槍魚(yú)。
比如,[2,2,2,1,1,1]這段序列是合法的,[1,2,1,2,1,2]是非法的。因?yàn)樗粷M足第二個(gè)要求。
東東希望你能幫助他找到最長(zhǎng)的一段合法壽司,以便自己能吃飽。
輸入格式
第一行:一個(gè)整數(shù)n(2≤n≤100000),壽司序列的長(zhǎng)度。
第二行:n個(gè)整數(shù)(每個(gè)整數(shù)不是1就是2,意義如上所述)
輸出格式
輸出:一個(gè)整數(shù)(代表東東可以選擇的最長(zhǎng)的一段連續(xù)的且合法的壽司)
樣例
樣例輸入1
7 2 2 2 1 1 2 2樣例輸出1
4樣例輸入2
6 1 2 1 2 1 2樣例輸出2
2樣例輸入3
9 2 2 1 1 1 2 2 2 2樣例輸出3
6思路
對(duì)于可選中的子序列,必須前一半均為一種,后一半均為另一種,所以這里對(duì)數(shù)據(jù)進(jìn)行了預(yù)處理,將數(shù)字相同的子序列進(jìn)行合并,記錄其數(shù)量。
如 2 2 2 1 1 1這一段原始數(shù)組,處理后為3 3
表示有3個(gè)數(shù)字相同的子序列,之后又有三個(gè)數(shù)字相同的子序列。
所以原數(shù)組變成了表示一段相同數(shù)字的子序列的長(zhǎng)度數(shù)組。因?yàn)樵瓟?shù)組中不是1就是2,所以處理后的數(shù)組相鄰的必代表不同的數(shù)字1或2,若數(shù)字相同,則必然在預(yù)處理的時(shí)候合并了。
處理結(jié)束后,對(duì)于兩個(gè)相鄰的數(shù)字a,b,局部可取到的最長(zhǎng)序列長(zhǎng)度為2*min(a,b),遍歷處理后的數(shù)組,即可取到所求的最長(zhǎng)子序列。
代碼
#include <iostream> using namespace std; const int size=1e5+10; int note[size]; int tot=-1; int N; int Max[size]; int solve() {int last=note[0];Max[++tot]=0;for(int i=0;i<N;i++)if(note[i]==last)Max[tot]++;else{Max[++tot]=1;last=note[i];}int ans=0;for(int i=1;i<=tot;i++){int temp=2*min(Max[i],Max[i-1]);ans=max(ans,temp);}return ans; } int main(int argc, char** argv) {scanf("%d",&N);for(int i=0;i<N;i++)scanf("%d",¬e[i]);int ans=solve();printf("%d\n",ans);return 0; }總結(jié)
以上是生活随笔為你收集整理的【Week 11 作业】必做题的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: VMware共享文件夹报错 解决方法
- 下一篇: 第十七届全国大学生智能车竞赛华南赛区比赛