1. 程式人生 > >NewCode----彩色寶石項鍊

NewCode----彩色寶石項鍊

題目描述:

有一條彩色寶石項鍊,是由很多種不同的寶石組成的,包括紅寶石,藍寶石,鑽石,翡翠,珍珠等。有一天國王把項鍊賞賜給了一個學者,並跟他說,你可以帶走這條項鍊,但是王后很喜歡紅寶石,藍寶石,紫水晶,翡翠和鑽石這五種,我要你從項鍊中擷取連續的一小段還給我,這一段中必須包含所有的這五種寶石,剩下的部分你可以帶走。如果無法找到則一個也無法帶走。請幫助學者找出如何切分項鍊才能夠拿到最多的寶石。

輸入描述:

我們用每種字元代表一種寶石,A表示紅寶石,B表示藍寶石,C代表紫水晶,D代表翡翠,E代表鑽石,F代表玉石,G代表玻璃等等,我們用一個全部為大寫字母的字元序列表示項鍊的寶石序列,注意項鍊是首尾相接的。每行代表一種情況。

輸出描述:

輸出學者能夠拿到的最多的寶石數量。每行一個

示例1:
輸入
ABCYDYE
ATTMBQECPD
輸出
1
3
解題思路:

相當於構造一個動態的滑動視窗,視窗的大小依次遞增,最小為5,最大為輸入字串的長度。然後用這個視窗依次從左向右框選字元,每框選依次,便進行依次判斷,如果符合題意,就輸出length-n,退出程式。

#include<iostream>
#include<string.h>
using namespace std;

bool In(string str,int n){
    int i,j;
    int
count=0; string s="ABCDE"; for(i=0;i<5;i++){ for(j=0;j<n;j++){ if(s[i]==str[j]){ count++; break; } } } if(count==5) return true; else return false; } int main(){ string str; string
temp; int length; int n; int i; int k; cin>>str; length=str.length(); for(n=5;n<=length;n++){ for(i=0;i<length;i++){ temp.clear(); for(k=0;k<n;k++){ temp.append(1,str[(i+k+1)%length]); } if(In(temp,n)){ cout<<length-n<<endl; return 0; } } } }

歡迎留言交流。。。