概述:
介于有學弟問我題目,并且有些疑問自己在CSDN搜索也不知如何搜索出想要的東西(當然其實都是從初學者過來的,在我自己摸索時,也有遇到過類似情況)。故有此想法,寫此題解,與其說是題解,倒不如說給大家分享一些博客與代碼,在補題時(正所謂,比賽不補題,等于沒比),可以輕松點,第一次用CSDN寫東西,不太熟練,或許有些小問題,請多擔待。
#第一題
printf語法題,按題目要求輸出即可。
#第二題
經典oj第一題a+b,多了個未知測試數據數量來進行讀入,雖然是競賽基本tips,但對于大多數同學來說,可能會不太友好,不過見過一次,學一下,基本也就會了。
多組測試數據介紹 詳情見博客添加鏈接描述
提供給新生C語言的寫法
//寫法一#include int main(){ int a,b; while(~scanf("%d %d",&a,&b)){ printf("%d/n",a+b); } return 0;} //寫法二#include int main(){ int a,b; while(scanf("%d %d",&a,&b)!=EOF){ printf("%d/n",a+b); } return 0;}
C++寫法
#include using namespace std;int main(){ int a,b; while(cin>>a>>b){ cout<<a+b<<endl; } return 0;}
#第三題
字符串模擬題,新生可能沒學到字符串,或許一些同學對于字符串理解較少,但其實實現并不難,主要還是卡在多組測試數據數量,讀入無法處理
題解:如何循環遍歷整個字符串有多種方式,可以選擇自己習慣的方式。一方面就是判斷字符串是否超過8個字符,另一方面就是是否滿足題目要求;就是四類字符出現三類,在遍歷的時候加以if else進行判斷,如果出現的話,它那一類的貢獻就是1,最后四種數加起來的貢獻超過3,即為合法字符串;
值得一提的是這里判斷字母,數字,可以用到這幾個函數來簡化操作:
int islower(int c):檢查字符是否為小寫的字母;(a~z)
int isupper(int c):檢查字符是否為大寫字母;(A~Z)
int isdigit(int c):檢查字符是否為十進制數字;(0~9)
想嘗試的同學,可以自己試試呢,不要忘了頭文件啊,不過這道題體現不出優勢,一些題目用類似這些函數,可以簡化代碼,減少錯誤。
這是博客鏈接,介紹了一些字符串函數添加鏈接描述
C語言代碼
#include #include int check(char s[]){ //判斷字符串是否合法,合法返回true,不合法返回false int n=strlen(s),i; if(n<8) return 0; //長度小于8,不符合題意,返回false; int a=0,b=0,c=0,d=0; //每一類默認是0,出現的這一類的,他的貢獻即為1; for(i=0;i<n;i++){ if(s[i]>="0"&&s[i]<="9") a=1; if(s[i]>="a"&&s[i]<="z") b=1; if(s[i]>="A"&&s[i]<="A") c=1; if(s[i]=="~"||s[i]=="!"||s[i]=="@"||s[i]=="#"||s[i]=="$"||s[i]=="%"||s[i]=="^") d=1; } return (a+b+c+d)>=3;}int main(){ char s[20]; while(~scanf("%s",s)){ if(check(s)==1) puts("YES"); else puts("NO"); } return 0;}
C++代碼
#include using namespace std;bool check(string s){ //判斷字符串是否合法,合法返回true,不合法返回false int n=s.size(); if(n<8) return false; //長度小于8,不符合題意,返回false; int a=0,b=0,c=0,d=0; //每一類默認是0,出現的這一類的,他的貢獻即為1; for(int i=0;i<n;i++){ if(s[i]>="0"&&s[i]<="9") a=1; if(s[i]>="a"&&s[i]<="z") b=1; if(s[i]>="A"&&s[i]<="Z") c=1; if(s[i]=="~"||s[i]=="!"||s[i]=="@"||s[i]=="#"||s[i]=="$"||s[i]=="%"||s[i]=="^") d=1; } return (a+b+c+d)>=3;}int main(){ string s; while(cin>>s){ if(check(s)==true) puts("YES"); else puts("NO"); } return 0;}
#第四題
題目有這么一點鍋,鑒于習慣,N的大小未知,導致一看就不想寫,不過一看就是一個貪心題,并且在網上搜索后,發現是藍橋某一年省賽的題,并且N最大只有10左右,而且是保證數據按照原點的順序遞增的,這些在題目中表達的都不是很明確,不是很友好。(新生可以先放放這一題,別的模擬題可以補一補,寫一寫)
網上有現成的題解與代碼,也就直接把博客分享給各位了添加鏈接描述
#第五題
經典01背包問題:屬于動態規劃入門題。題目轉換一下,就是求在體積為m的情況下,把所有物品能湊成小于m的最大體積(即經典01背包問題),m減去這個最大體積,就是要求的答案。(新生可以先放放這一題,別的模擬題可以補一補,寫一寫)
給一個01背包博客,感興趣的同學可以自己看看添加鏈接描述
僅提供一個C++的代碼,
#include using namespace std;int f[200010]; //全局變量,初始值自然為0;int main(){ int m,n,maxs=0; cin>>m>>n; f[0]=1; //初始體積可以為0,初始化 for(int i=1,v;i<=n;i++){ //枚舉物品 cin>>v; for(int j=m;j>=v;j--){ //枚舉體積 f[j]|=f[j-v]; if(f[j]==1) maxs=max(maxs,j); } } cout<<m-maxs<<endl; return 0;}
#第六題
依舊是經典字符串模擬題,不過可以是我閱讀理解比較差,那個輸出看了幾遍都沒太看懂,后來似乎試懂了,但是也老是有問題,然后因為校賽,比較隨意,WA的比較多,也懶得寫第四題了(反正沒法AK),還有點事,就先走了。后續發現了問題所在,當n=1的時候,是there is,n不為1是,應該是there are。
解析:遍歷字符串,對每個字符進行判斷,然后同時進行修改,這里需要注意就是他的輸出條件,不妨開一個char數組來存放答案,按要求即可。
C語言:(感謝孟帥同學提供的代碼,我就不用寫了)
#define _CRT_SECURE_NO_WARNINGS 1#include #include #include int main(){ int n; scanf("%d", &n); int m = 0; int N = n; char na[1010][100]; char pss[1010][100]; memset(na, 0, sizeof(na)); memset(pss, 0, sizeof(pss)); while (N--) { char name[15],ps[15]; scanf("%s %s", name, ps); int isc = 0; //標記數字是否被修改過 int i = 0; while (ps[i] != "/0") { //判斷字符串是否到結尾了 if (ps[i] == "1") { ps[i] = "@"; isc = 1; } if (ps[i] == "0") { ps[i] = "%"; isc = 1; } if (ps[i] == "l") { ps[i] = "L"; isc = 1; } if (ps[i] == "O") { ps[i] = "o"; isc = 1; } i++; } if (isc == 1) { //若密碼被修改了,進行相應處理 memcpy(na[m], name, sizeof(name)); //在同一個下標下,一個數組存的名字 memcpy(pss[m], ps, sizeof(ps)); //在同一個下標下,另一個數組存的密碼 m++; //該數字下存完,下一個加一 } } if (0 == m) { if (1 == n) printf("There is 1 account and no account is modified/n");//有個坑點,如果總數是一個人要用is else printf("There are %d accounts and no account is modified", n);//多個人,這里是are } else { printf("%d/n", m); //打印修改的人數,并遍歷輸出 for (int i = 0; i < m; i++) { printf("%s %s/n", na[i], pss[i]); } } return 0;}
C++:
#include using namespace std;pair<string,string> q[1010]; bool check(string &s){ //注意這里的引用,對s字符串進行了修改 bool flag=false; //字符串flag標記,flag為flase是未被修改 for(int i=0;i<s.size();i++){ if(s[i]=="1"){ s[i]="@"; flag=true; }else if(s[i]=="0"){ s[i]="%"; flag=true; }else if(s[i]=="l"){ s[i]="L"; flag=true; }else if(s[i]=="O"){ s[i]="o"; flag=true; } } return flag; //若字符串被修改了,返回true; }int main(){ int n; cin>>n; int cnt=0; string s1,s2; for(int i=1;i<=n;i++){ cin>>s1>>s2; if(check(s2)){ //check判斷的同時修改 q[++cnt]={s1,s2}; //若該字符串被秀了,自加一個位置添加數據; } } if(cnt==0){ if(n==1){ //有個坑點,如果總數是一個人要用is printf("There is 1 account and no account is modified/n"); }else{ //多個人,這里是are printf("There are %d accounts and no account is modified", n); } }else{ printf("%d/n",cnt); for(int i=1;i<=cnt;i++) //循環遍歷輸出cnt修改后的人的信息 cout<<q[i].first<<" "<<q[i].second<<endl; } return 0;}
#第七題:
題解:題目意思很明確,就套娃,按著他的要求執行即可,需要寫一個change()函數和一個check()函數;
check()函數:判斷字符串是否回文,鑒于自己介紹不清楚,在此給大家分享一個博客,感興趣可自行查看
添加鏈接描述
change()函數:進制模擬,一個數,加上他的倒序數,即把原數字翻轉,然后從低位往高位相加,注意最后有可能最高位有進位,記得處理一下最后的一位(并且會且只會多一會,可以用十進制試一下,比如987+789,是不可能變成5位數的)
鑒于拿C語言實現比較麻煩(好吧,我比較懶,不想再寫一遍了),個人只提供一種C++的寫法:
#include using namespace std;bool check(string s){ //判斷字符串是否回文,方法多種多樣,可選擇自己習慣的方式 int i=0,j=s.size()-1; while(i<j){ if(s[i]==s[j]){ i++,j--; }else{ return false; } } return true;}string change(string s1,int n){ string s2=s1; //拷貝原字符串 reverse(s2.begin(),s2.end()); //原串s1的翻轉字符串 string res; //存放結果字符串 int ans=0; //用來模擬進位 for(int i=s1.size()-1;i>=0;i--){ //循環從后往前,從個位開始累加 int a,b; //a存的是原字符串在第i的數字的大小,b存的是翻轉后的s在第i的數字 if(s1[i]>="0"&&s1[i]<="9") a=s1[i]-"0"; //s[i]是數字,那他的大小就是它和"0"之間的差值 else a=s1[i]-"A"+10; //s[i]是字母,他的大小是它和"A"之間的差值在加10,因為A對應的是10 if(s2[i]>="0"&&s2[i]<="9") b=s2[i]-"0"; //處理逆序 else b=s2[i]-"A"+10; ans+=a+b; //累加 int temp=ans%n; //求出當前的值 ans/=n; //保留進位 if(temp<=9) res+=temp+"0"
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/124500.html
摘要:阿里巴巴有一群天馬行空腳踏實地的阿里星。天馬行空腳踏實地奮斗在阿里巴巴生態圈里,阿里星們高考狀元清華博士論文達人的光環早已褪去,但是不斷學習,不斷接受挑戰,仍然是這些學霸的本色。 showImg(https://segmentfault.com/img/remote/1460000018728353); 阿里巴巴有一群天馬行空腳踏實地的阿里星。 阿里巴巴的春季校招已經啟動。在阿里的技術...
摘要:阿里巴巴有一群天馬行空腳踏實地的阿里星。天馬行空腳踏實地奮斗在阿里巴巴生態圈里,阿里星們高考狀元清華博士論文達人的光環早已褪去,但是不斷學習,不斷接受挑戰,仍然是這些學霸的本色。 showImg(https://segmentfault.com/img/remote/1460000018728353); 阿里巴巴有一群天馬行空腳踏實地的阿里星。 阿里巴巴的春季校招已經啟動。在阿里的技術...
摘要:文章目錄一你應該知道的藍橋杯含金量獲獎率高不高支持哪些編程語言二川川帶你體驗藍橋杯省賽藍橋杯藍橋杯三個人感受一你應該知道的藍橋杯如果你是計算機相關專業,你不知藍橋杯就過不去了,我們來看看藍橋杯如何,不知道更應該來了解下了。 ...
此專欄文章是對力扣上算法題目各種方法的總結和歸納, 整理出最重要的思路和知識重點并以思維導圖形式呈現, 當然也會加上我對導圖的詳解. 目的是為了更方便快捷的記憶和回憶算法重點(不用每次都重復看題解), 畢竟算法不是做了一遍就能完全記住的. 所以本文適合已經知道解題思路和方法, 想進一步加強理解和記憶的朋友, 并不適合第一次接觸此題的朋友(可以根據題號先去力扣看看官方題解, 然后再看本文內容). 關...
摘要:此專欄文章是對力扣上算法題目各種方法的總結和歸納整理出最重要的思路和知識重點并以思維導圖形式呈現當然也會加上我對導圖的詳解目的是為了更方便快捷的記憶和回憶算法重點不用每次都重復看題解畢竟算法不是做了一遍就能完全記住的所 ...
閱讀 3538·2023-04-26 00:16
閱讀 1365·2021-11-25 09:43
閱讀 3830·2021-11-23 09:51
閱讀 2970·2021-09-24 09:55
閱讀 718·2021-09-22 15:45
閱讀 1394·2021-07-30 15:30
閱讀 3067·2019-08-30 14:04
閱讀 2247·2019-08-26 13:46