程序设计与算法 | (14) Lecture(7) OJ作业

OJ地址

Lecture (7)包含以下五道编程题,可以在上面的OJ提交。

040:统计数字字符个数

在这里插入图片描述

#include <iostream>
using namespace std;
#define N 255
char str[N+10];

int main(int argc, const char * argv[]) {
    
    gets(str);
    int count = 0;
    for(int i=0;str[i];i++)
        if(isdigit(str[i]))
            count++;
    cout<<count<<endl;
    return 0;
}

041:找第一个只出现一次的字符

在这里插入图片描述

#include <iostream>
using namespace std;
#define N 100000
char str[N+10];
int a[26]; //统计每个字母出现的次数

int main(int argc, const char * argv[]) {
    
    cin>>str;
 
    for(int i=0;str[i];i++)
    {
        a[str[i]-'a']++;
    }
    
    int i;
    for(i=0;str[i];i++)
        if(a[str[i]-'a']==1)
            break;
    if(!str[i])
        cout<<"no"<<endl;
    else
        cout<<str[i]<<endl;
    return 0;
}

042:石头剪子布

在这里插入图片描述

#include <iostream>
#include <cstring>
using namespace std;
#define N 10
char s1[N+10];
char s2[N+10];

int main(int argc, const char * argv[]) {
   
    int n;
    cin>>n;
    while(n--)
    {
        cin>>s1>>s2;
        if(strcmp(s1,"Rock")==0)
        {
            if(strcmp(s2,"Rock")==0)
                cout<<"Tie"<<endl;
            else if(strcmp(s2,"Paper")==0)
                cout<<"Player2"<<endl;
            else
                cout<<"Player1"<<endl;
        }
        else if(strcmp(s1,"Paper")==0)
        {
            if(strcmp(s2,"Rock")==0)
                cout<<"Player1"<<endl;
            else if(strcmp(s2,"Paper")==0)
                cout<<"Tie"<<endl;
            else
                cout<<"Player2"<<endl;
        }
        else
        {
            if(strcmp(s2,"Rock")==0)
                cout<<"Player2"<<endl;
            else if(strcmp(s2,"Paper")==0)
                cout<<"Player1"<<endl;
            else
                cout<<"Tie"<<endl;
        }
    }
    return 0;
}

043:最长最短单词

在这里插入图片描述

#include <iostream>
#include <cstring>
#define N 30000
char s1[N+10];

using namespace std;

int main(int argc, const char * argv[]) {
    
    gets(s1);
    int minLen=1<<30, maxLen=-1;//最小初始化为最大 最大初始化为最小
    int start;
    bool flag = false;
    int longStart,shortStart;
    int len = strlen(s1);
    for(int i=0;i<=len;i++) //注意是 i<=len 如果i<len 对于输入只有一个字母的情况,else不会被执行,longStart,shortStart不会计算。
    {
        if(isalpha(s1[i])) //字母字符
        {
            if(!flag)
            {
                start = i;  //记录每个单词的开始字符的位置
                flag = true;
            }
        }
        else //非字母字符
        {
            if(flag) //第一个非字母字符 防止两个单词之间有多个非字母字符,此时单词长度不准确; 还有就是必须先碰到单词,才能计算wordlen,否则刚开始是非字母字符的话,start没有定义
            {
                int wordlen=i-start;
                if(wordlen>maxLen)
                {
                    maxLen=wordlen;
                    longStart = start; //最长单词开始字符的位置
                }
                if(wordlen<minLen)
                {
                    minLen=wordlen;
                    shortStart = start; //最短单词开始字符的位置
                }
                flag = false;
            }
        }
    }
    for(int i=longStart;isalpha(s1[i]);i++)
        cout<<s1[i];
    cout<<endl;
    
    for(int i=shortStart;isalpha(s1[i]);i++)
           cout<<s1[i];
       cout<<endl;
    return 0;
}

044:密码翻译

在这里插入图片描述

#include <iostream>
using namespace std;

char s1[] = "abcdefghijklmnopqrstuvwxyz";
char s2[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
#define N 80
char s[N+10];

int main(int argc, const char * argv[]) {
 
    gets(s);
    for(int i=0;s[i];i++)
        if(s[i]>='a'&&s[i]<='z')
            cout<<s1[(s[i]-'a'+1)%26];
        else if(s[i]>='A'&&s[i]<='Z')
            cout<<s2[(s[i]-'A'+1)%26];
        else
            cout<<s[i];
    cout<<endl;
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值