A:毒牡蛎

知识点:分支结构

思路:sick sick 表示都吃了有病的牡蛎,则1号牡蛎有病毒。 fine sick 表示高桥没吃有毒牡蛎,青木吃了有病的牡蛎,则3号牡蛎有病毒。 sick fine 表示高桥吃了有毒牡蛎,青木没吃有病的牡蛎,则2号牡蛎有病毒。 fine fine 表示都没吃有病的牡蛎,则4号牡蛎有病毒

参考代码

#include<bits/stdc++.h>
using namespace std;
string s1,s2; 
int main(){
    cin>>s1>>s2;
    if(s1=="sick"&&s2=="fine"){
        cout<<2;
    }else if(s1=="fine"&&s2=="sick"){
        cout<<3;
    }else if(s1=="fine"&&s2=="fine"){
        cout<<4;
    }else{
        cout<<1;
    }
    return 0;
}

B:单词缩写

知识点:字符串

思路:首先在[1,n]之间处理所有的字符串,并确定其最小的子串。具体方法是,在[1,s[i].size()]之间进行枚举,从0开始截取对应长度,然后获得一个子串sub。接着,我们要在[1,n]范围之内进行判断,如果sub不是其他任何字符串的前缀,那么说明sub符合条件,可以输出。

参考代码

#include<bits/stdc++.h>
using namespace std;
string s[51];
int n;
bool check(int l,int id){
    for(int i=1;i<=n;i++){
        if(id==i)continue;
        if(s[id].substr(0,l)==s[i].substr(0,l)){
            return 0;
        } 
    }
    return 1;
}
int main(){
    cin>>n;
    for(int i=1;i<=n;i++){
        cin>>s[i];
    }
    for(int i=1;i<=n;i++){
        for(int j=1;j<=s[i].size();j++){
            if(check(j,i)){
                cout<<s[i].substr(0,j)<<endl; 
                break; 
            }
        }
    }
    return 0;
}

C:A..B..C

知识点:枚举

思路:使用三个数组a[101]、b[101]、c[101]单独存储'A'、'B'、'C'三个单词出现的位置,再分别枚举'A'、'B'、'C'出现的数量,若满足b[j]-a[i]==c[k]-b[j]&&a[i]<c[k]&&b[j]<c[k]则统计答案数量即可。注意i的范围为为'A'出现的次数,j的范围为为'B'出现的次数,k的范围为为'C'出现的次数。

参考代码

#include<bits/stdc++.h>
using namespace std;
string s;
int a[101],b[101],c[101],_a,_b,_c,ans;
int main(){
    cin>>s;
    for(int i=0;i<s.size();i++){
        if(s[i]=='A') a[++_a]=i;
        if(s[i]=='B') b[++_b]=i;
        if(s[i]=='C') c[++_c]=i;
     } 
    for(int i=1;i<=_a;i++)
        for(int j=1;j<=_b;j++)
            for(int k=1;k<=_c;k++)
                if(b[j]-a[i]==c[k]-b[j]&&a[i]<c[k]&&b[j]<c[k])
                    ans++;
    cout<<ans;
    return 0;
}

D:积木大赛

知识点:贪心

思路:若a[i]=a[i+1],即左边的一组比右边的高,当高度满足左面时,右边的也一定满足了,所以不需要增加ans。 所以最终结果就是ans。

参考代码

#include<bits/stdc++.h>
using namespace std;
long long n,a[100001],ans;
int main(){
    cin>>n;
    for(int i=1;i<=n;i++){
        cin>>a[i];
        if(a[i]>a[i-1])ans+=a[i]-a[i-1];
    }
    cout<<ans;
    return 0;
}
Copyright ©图灵之星 2024,转载需注明出处该文件修订时间: 2025-03-01 22:09:36

results matching ""

    No results matching ""