1. 程式人生 > >慕課-程式設計與演算法(大學先修課)-郭煒-第七週練習題

慕課-程式設計與演算法(大學先修課)-郭煒-第七週練習題

1.輸入一行字元,統計出其中數字字元的個數。

#include <iostream>
using namespace std;

int main() {
    char ch;  
    int count = 0;  

    while( ch = getchar(), ch != '\n') //若讀入的字元不是回車  
    {  
        if(isdigit(ch)) //若是數字  
            count++;  
    }   
    printf("%d\n", count); 
}

2.給定一個只包含小寫字母的字串,請你找到第一個僅出現一次的字元。如果沒有,輸出no。

#include <iostream>
using namespace std;
char a[26];
int s[26];
int main() {
    int q=0,temp;
    char ch;
    while(ch=getchar(),ch!='\n') 
    {
        int i=0;
        bool judge=0;
        temp=(int)ch;
        s[temp-97]++;
        for(i;i<26;++i)
        {
            if(a[i]==ch)
            {
                judge=1
; break; } } if(judge==0) { a[q]=ch; q++; } } char w='0'; bool j=0; for(int i=0;i<26;++i) { if(a[i]!=w&&s[(int)a[i]-97]==1) { cout<<a[i]; j=1
; break; } } if(j==0) cout<<"no"; }

3.石頭剪子布,是一種猜拳遊戲。起源於中國,然後傳到日本、朝鮮等地,隨著亞歐貿易的不斷髮展它傳到了歐洲,到了近現代逐漸風靡世界。簡單明瞭的規則,使得石頭剪子布沒有任何規則漏洞可鑽,單次玩法比拼運氣,多回合玩法比拼心理博弈,使得石頭剪子布這個古老的遊戲同時用於“意外”與“技術”兩種特性,深受世界人民喜愛。

遊戲規則:石頭打剪刀,布包石頭,剪刀剪布。

現在,需要你寫一個程式來判斷石頭剪子布遊戲的結果。

#include <iostream>
#include <string>
using namespace std;
int Num(string);
int main() {
    int n;
    int a,b;
    cin>>n;
    string player;
    for(int i=0;i<n;++i)
    {
        cin>>player;
        a=Num(player);
        cin>>player;
        b=Num(player);
        a=a-b;
        if((a==-1)|(a==2))
        {
            cout<<"Player1"<<endl;
        }
        else if((a==1)|(a==-2))
        {
            cout<<"Player2"<<endl;
        }
        else 
        {
            cout<<"Tie"<<endl;
        }
    }
}
int Num(string s)
{
    if(s=="Rock")
    {
        return 0;
    }
    else if(s=="Scissors")
    {
        return 1;
    }
    else if(s=="Paper")
    {
        return 2;
    }
}

4.輸入1行句子(不多於200個單詞,每個單詞長度不超過100),只包含字母、空格和逗號。單詞由至少一個連續的字母構成,空格和逗號都是單詞間的間隔。
試輸出第1個最長的單詞和第1個最短單詞。

#include <iostream>
#include <string>
using namespace std;
string str[200];
int main() {
    string maxs,mins,s="";
    int i=0;
    bool judge=0;
    char ch;
    while((ch = getchar())!='\n')
    {
        if(judge == 1 && (ch == ' ' || ch == ','))
            continue;
        if(ch != ' ' && ch != ',')
        {
            s += ch;
            str[i]=s;
            judge=0;
        }
        else 
        {
            s="";
            judge=1;
            if(str[0]!=s)
                i++;
        }
    }
    maxs=str[0];
    mins=str[0];
    for(int i=0;i<200;i++)
    {   
        if(str[i].size() > maxs.size()){
            maxs = str[i];
        } 
        if(!str[i].empty() && str[i].size() < mins.size()){
            mins = str[i];
        } 
    }
    cout<<maxs<<endl<<mins;
}

5.在情報傳遞過程中,為了防止情報被截獲,往往需要對情報用一定的方式加密,簡單的加密演算法雖然不足以完全避免情報被破譯,但仍然能防止情報被輕易的識別。我們給出一種最簡的的加密方法,對給定的一個字串,把其中從a-y,A-Y的字母用其後繼字母替代,把z和Z用a和A替代,其他非字母字元不變,則可得到一個簡單的加密字串。

#include <iostream>
#include <string>
using namespace std;
int main() {
    char s[90];
    gets(s);
    for(int i=0;s[i];i++)
    {
        if(isalpha(s[i]))
        {
            if(s[i]=='z')
            {
                s[i]='a';
            }
            else if(s[i]=='Z')
            {
                s[i]='A';
            }
            else
                s[i]=(char)((int)s[i]+1);
        }
    }
    cout<<s;
}