1.12寒假集训

发布时间:2024年01月12日

A:

解题思路:

输出整体可以分成两部分:

第一部分循环3*n次,第一部分又可以分成三个部分,分别是'*','.','*',分别循环n,2 * n,n次

第二部分循环n次,又可以分成五个部分,'.','*','.','*','.',循环i,n(n - i) * 2,n,i次

下面是c++代码:

#include<iostream>
using namespace std;
int main()
{
    int n;
    cin >> n;
    for(int i = 1;i <= 3 * n;i++){
        for(int j = 1;j <= n;j++){
            cout << '*';
        }
        for(int j = 1;j <= 2 * n;j++){
            cout << '.';
        }
        for(int j = 1;j <= n;j++){
            cout << '*';
        }
        cout << endl;
    }
    for(int i = 1;i <= n;i++){
        for(int j = 1;j <= i;j++){
            cout << '.';
        }
        for(int j = 1;j <= n;j++){
            cout << '*';
        }
        for(int j = 1;j <= 2 * (n - i);j++){
            cout << '.';
        }
        for(int j = 1;j <= n;j++){
            cout << '*';
        }
        for(int j = 1;j <= i;j++){
            cout << '.';
        }
        cout << endl;
    }
    return 0;
}

B:

解题思路:嗯........n为3的时候直径为1,其他都是2,复杂度o(1)

下面是c++代码:

#include<iostream>
using namespace std;
int main()
{
    int n;
    cin >> n;
    if(n == 3){
        cout << 1;
    }else{
        cout << 2;
    }
    return 0;
}

C:

解题思路:

这题没什么好说的,就按照题目模拟就行,前k项小写变大写,剩下的大写变小写

下面是c++代码:

#include<iostream>
using namespace std;
int main()
{
    int n,k;
    string s;
    cin >> n >> k;
    cin >> s;
    for(int i = 0;i < k;i++){
        if(s[i] >= 'a' && s[i] <= 'z'){
            s[i] = s[i] - 32;
        }
    }
    for(int i = k;i < n;i++){
       if(s[i] >= 'A' && s[i] <= 'Z'){
            s[i] = s[i] + 32;
        }
    }
    for(int i = 0;i < n;i++){
        cout << s[i];
    }
    return 0;
}

D:

解题思路:

这道题不知道循环的次数,那就定义个while死循环,里面做判断,如果施肥间隔天数等于2时,成长值加上浇水和施肥的成长值,间隔天数变为0,天数自增1,如果成长值大于等于z,就结束循环;如果施肥间隔天数不为2,那么成长值就加上浇水成长值,间隔自增1,天数自增1,如果成长值大于等于z,就结束循环;最后输出领导免费水果的天数。

下面是c++代码:

#include<iostream>
using namespace std;
int main()
{
    int x,y,z,num = 0,index = 2,day = 0;;
    cin >> x >> y >> z;
    while(1){
        if(index == 2){
            num += x + y;
            index = 0;
            day++;
            if(num >= z){
                cout << day;
                break;
            }
        }else{
            num += x;
            index++;
            day++;
            if(num >= z){
                cout << day;
                break;
            }
        }
    }
    return 0;
}

E:

解题思路;

这道题可以分成两部分计算

第一部分是按顺序正好遍历完s字符串,如果能截取t,就++。

第二部分是形成闭环,也就是i?>= s.length() - (t.length() - 1)时,遍历次数为t.length(),

如果j?== s.length(),j就赋值为0,形成闭环,依次判断s[j]和t[stop](stop是t字符串的索引)是否相等,如果不相等就跳出循环,否则就视为可以截取字符串t。

下面是c++代码:

#include<iostream>
using namespace std;
int main()
{
    int index = 1,num = 0;
    string s,t;
    cin >> s >> t;
    for(int i = 0;i < s.length();i++){
        index = 1;
        if(i >= s.length() - (t.length() - 1)){
            for(int j = i,stop = 0;stop < t.length();j++,stop++){
                if(j == s.length()){
                    j = 0;
                }
                if(s[j] != t[stop]){
                    index = 0;
                    break;
                }
            }
            if(index == 1){
                num++;
            }
        }else{
            for(int j = 0;j < t.length();j++){
            if(s[i + j] != t[j]){
                index = 0;
                break;
            }
        }
        if(index == 1){
            num++;
        }
        }
    }
    cout << num;
    return 0;
}

写题解真的好累。。。。。。

文章来源:https://blog.csdn.net/2301_81718511/article/details/135548235
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。