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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

蓝桥杯_算法训练_字串统计

發(fā)布時間:2025/3/21 编程问答 52 豆豆
生活随笔 收集整理的這篇文章主要介紹了 蓝桥杯_算法训练_字串统计 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

其實題目已經(jīng)給的很清楚了,枚舉所有的情況,統(tǒng)計出現(xiàn)次數(shù),找到符合條件的結果。

那么我們就根據(jù)這個提示完成即可:

第一步:枚舉所有可能的字串:

1 #include<iostream> 2 #include<string.h> 3 using namespace std; 4 int main() 5 { 6 int n; 7 char s[61]; //存放原來的字符串 8 char a[61][61]; //存放所有可能的字串 9 int i=0,j=0,r=0; 10 11 cin>>n; 12 cin>>s;//輸入原來的字符串 13 14 while(1) 15 { 16 while(j<n) //n個一賦值 17 { 18 a[i][j] = s[r]; 19 j++; 20 r++; 21 } 22 a[i][j] = '\0';//問題所在處 23 if(i==strlen(s)-n && j==n) break;//當記錄到最后一個字符的時候,說明記錄已完畢 24 j = 0; 25 r = r - n + 1; 26 i++; 27 }

這里面最初我是出現(xiàn)了一點小問題的:也就是上面代碼中我注釋的那個“問題所在處”。沒有給每個字符串后面加‘\0’,這就相當于沒有終止該字符串。當時調(diào)試程序的時候是有問題的。給大家看一個例子:

我當時設置了兩個地方的輸出,然后程序給我的回應就是上面的東西,表示很郁悶啊。還好發(fā)現(xiàn)了錯誤并且進行了改正。

?代碼不需要額外解釋,注釋還是比較詳細的。

第二步:統(tǒng)計出現(xiàn)次數(shù)

1 /*統(tǒng)計個數(shù)*/ 2 int num[61] = {0}; 3 char temp = '0'; 4 for(j = 0; j <= i; j++) 5 { 6 for(r = j+1; r <= i; r++) 7 { 8 if(strcmp(a[j],a[r])==0) 9 { 10 num[j]++; 11 a[r][0] = temp;//給首位賦一個數(shù)字,使其絕對不會成為最大次數(shù)的競爭對手 12 temp = temp+1; 13 } 14 } 15 }

?

  我的想法是:之前已經(jīng)枚舉了所有的情況,那就統(tǒng)計一下對應的出現(xiàn)次數(shù),一遍一遍的刷,但是在刷的過程中,要注意的是,需要將重復的字串計數(shù)之后進行一下處理,我的做法是,將字串的首位變成數(shù)字,這樣就可以保證至少自己人不會和自己人杠上,也就是說同一個字串不會搶奪第一的位置。

  這里面需要說明的是代碼第11和12行:起初設置的時候,我將首位直接設置成了‘0’,但是發(fā)現(xiàn)可能會出現(xiàn)首字母為‘0’的字符串才是最多的,因為很多字串可能就是首字母不同,如果我全部設置成‘0’,那就給了他們相同的機會,所以我做了改動,讓臨時變量temp隨著統(tǒng)計發(fā)生變化,本來想用隨機數(shù)什么的,但是這里因為是字符的處理,隨機數(shù)可能還是有些麻煩的。

第三步:找到最終結果:

  我們需要的是出現(xiàn)次數(shù)最多的字串,如果有相同次數(shù)的,選擇最長的字串,如果還是很多個,選擇最早的那個,這個還是比較好控制的。

1 /*進行數(shù)字的比較,確定出現(xiàn)次數(shù)最多的那個*/ 2 int max = 0;//記錄下標的變量 3 for(r = 1; r <= i; r++) 4 { 5 if(num[max]<num[r]) 6 { 7 max = r; 8 } 9 else if(num[max]==num[r])//出現(xiàn)次數(shù)一樣多 ,找最長的那個 10 { 11 if(strlen(a[max]) < strlen(a[r])) 12 { 13 max = r; 14 } 15 } 16 } 17 //此時max就是我們尋找的那個下標 18 cout<<a[max];

?

不到之處還希望大家批評指正,在此謝過!20:06:39 ??2017-08-13

總結

以上是生活随笔為你收集整理的蓝桥杯_算法训练_字串统计的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。