信息学奥赛一本通 1148:连续出现的字符 | OpenJudge NOI 1.9 11
生活随笔
收集整理的這篇文章主要介紹了
信息学奥赛一本通 1148:连续出现的字符 | OpenJudge NOI 1.9 11
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
【題目鏈接】
ybt 1148:連續出現的字符
OpenJudge NOI 1.9 11:連續出現的字符
【題目考點】
1. 字符串處理
2. 數值統計
【題解代碼】
解法1:比較相鄰字符
#include<bits/stdc++.h> using namespace std; int main() {int k, cn = 1, len;//cn:字符連續出現的次數 cin>>k;char s[2505];cin>>s;if(k == 1)//如果k為1,為特例。 {cout<<s[0];//直接輸出第0個字符,即為連續出現1次的字符 return 0;}len = strlen(s);for(int i = 1; i < len; ++i){if(s[i] == s[i-1])//如果現在看的字符和前一個字符相同 {cn++;//那么字符連續出現,連續出現的次數加1 if(cn >= k)//如果已經連續出現k次 {cout<<s[i];//輸出這個字符 return 0;//結束程序 }}else//如果當前字符與前一個字符不同cn = 1;//那么重新開始計數,當前字符連續出現1次 }cout<<"No";//如果沒有能達到連續出現k次的情況,輸出No return 0; }解法2:設一個變量,用于表示當前關注的連續字符
#include<bits/stdc++.h> using namespace std; int main() {int k, ct, len; cin>>k;char s[2505], c;//c:當前關注的,在連續出現的字符 cin>>s;c = '\0';//c的初始值如果是'\0',則一定不會與s[0]相同,因而第一次循環時會執行else下的語句段,為c與ct賦初值 len = strlen(s);for(int i = 0; i < len; ++i){if(s[i] == c)//如果當前看的字符s[i]與關注的字符c相同 ct++;//計數加1 else//如果看到與c不同的字符(第一次循環,i為0時,也會走這里) {c = s[i];//改變關注的字符為s[i] ct = 1;//重新計數 }if(ct >= k)//如果已經連續出現k次 {cout<<c;return 0;}}cout<<"No";return 0; }總結
以上是生活随笔為你收集整理的信息学奥赛一本通 1148:连续出现的字符 | OpenJudge NOI 1.9 11的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 信息学奥赛一本通 1007:计算(a+b
- 下一篇: 信息学奥赛一本通(2056:【例3.7】