原文題目
python
# 解題思路:
# 用count數字串裡面每個字母重複幾次
# 重複的次數放到SET裡面,只要SET裡面的個數沒變
# 表示有重複,就不是COOl Word
# 每一次計算完一個字母,就將該字母刪除
# 直到沒有字母就完成了
case = 1 # 計算目前是CASE多少
while True:
try: # EOF用的
casenumber = input() # 輸入測資數量
while casenumber == '': # 會有空白不能直接轉int
casenumber = input()
else: # else表示迴圈正常結束(沒有被break)
casenumber = int(casenumber) # 將測資數量改成int
cool = 0 # 計算有幾個cool word
while casenumber > 0: # 輸入字串的迴圈
casenumber -= 1
string = input() # 輸入要判斷的字串
count = set() # 開一個SET
last_count = 0 # 紀錄上次的SET數目
while len(string) > 0: # 只要字串裡有字就要進行判斷
if string.count(string[0]) == len(string) and len(count) == 0:
break # 如果只有一個字母的話就不適COOL WORD
count.add(string.count(string[0])) # 將字串第一個字母重複的次數放到SET裡面
if last_count == len(count): # 如果SET數目一樣表示有字母重複的次數一樣
break
else: # 沒有就紀錄這次的重複的數量
last_count = len(count)
string = string.replace(string[0], '') # 將這次判斷重複的字母刪掉
else: # 正常結束表示每個字母重複的次數都一樣
cool += 1
print('Case ', end='') # 照格式輸出
print(case, end='')
print(': ', end='')
print(cool)
case += 1
except: # 有EOF就結束
break
遇到的問題
1:沒有處理空行
2:沒有處理EOF
3:輸出格式不對,自己使用\b可以,線上測試不行
C++
/*
2019/12/28
解題思路
用count數字串裡面每個字母重複幾次
重複的次數放到SET裡面,只要SET裡面的個數沒變
表示有重複,就不是COOl Word
每一次計算完一個字母,就將該字母刪除
直到沒有字母就完成了
*/
#include <iostream>
#include <string>
#include <set>
using namespace std;
int main()
{
int casenumber=0,c=1,cool,count,ls,flag=0;
string str;
char sf;
set <int> s;
while(cin>>casenumber)//輸入有幾組測資
{
cool=0;//COOL歸零
while(casenumber--)
{
cin>>str;//輸入測資字串
s.clear();//各種歸零
ls=0;
flag=0;
while(str.length()>0)
{//判斷字母重複幾次的迴圈
count=0;//計數重複次數
sf=str[0];//紀錄第一個字母
for(int j=0;j<str.length();j++)
{//一字一字判斷是否一樣
if(sf==str[j])//找到一樣的字母
{
count++;//重複次數+1
str.erase(j,1);//刪掉現在的字母
j--;//因為字母被刪除,j要減一
}
}
s.insert(count);//將重複的值給set
if(ls==s.size()||(ls==0&&str.length() ==0))
{//如果set的size一樣,或是只有一個字母,表示字串不是COOL
flag=1;
break;
}
ls=s.size();//紀錄這次的size,以供下次比較使用
}
if(flag==0)//沒事情,字串就是cool;
{
cool++;
}
}
cout<<"Case "<<c<<": "<<cool<<endl;//輸出
c++;//下筆測資
}
return 0;
}
遇到的問題
1:一開始用兩個for迴圈,因為會刪除字,所以外層迴圈有跳過問題
2:刪除字串,J沒有減一
3:變數ls沒有歸零,歸零要完整
請先 登入 以發表留言。