寝癖頭の解法

学習中の覚え書きを投稿、更新していきます。

paizaラーニング: C++による「Cランクレベルアップメニュー 」問題集: 文字列

paizaラーニングのレベルアップ問題集「Cランクレベルアップセット」からの出典です。
paiza.jp
C++による「Cランクレベルアップメニュー 」問題集: 文字列と、それらの提出コードの解答例です。

僕が作成、提出したコードは、以下のとおりです。

・STEP: 1 整数と文字列

/*
C++による「Cランクレベルアップメニュー 」問題集: 文字列
STEP: 1 整数と文字列
https://paiza.jp/works/mondai
提出コードの解答例
https://neguse-atama.hatenablog.com
*/
#include<bits/stdc++.h>
using namespace std;
int main(void){
    int n;
    string a;
    cin>>n;
    for(int i=0;i<n;i++){
        cin>>a;
        cout<<a.size()<<endl;
    }
    return 0;
}

・STEP: 2 部分文字列

/*
C++による「Cランクレベルアップメニュー 」問題集: 文字列
STEP: 2 部分文字列
https://paiza.jp/works/mondai
提出コードの解答例
https://neguse-atama.hatenablog.com
*/
#include<bits/stdc++.h>
using namespace std;
int main(void){
    char a;
    string s;
    cin>>a>>s;
    int cnt=0;
    for(int i=0;i<s.size();i++){
        if(s[i]==a){
            cnt++;
        }
    }
    if(cnt>0){
        cout<<"YES"<<endl;
    }else{
        cout<<"NO"<<endl;
    }
}

・STEP: 3 数字の文字列操作(基本)

/*
C++による「Cランクレベルアップメニュー 」問題集: 文字列
STEP: 3 数字の文字列操作(基本)
https://paiza.jp/works/mondai
提出コードの解答例
https://neguse-atama.hatenablog.com
*/
#include<bits/stdc++.h>
using namespace std;
int main(void){
    int s;
    cin>>s;
    int a=s/1000,b=(s%1000)/100,c=((s%1000)%100)/10,d=((s%1000)%100)%10;
    int sum1=a+d;
    int sum2=b+c;
    cout<<sum1<<sum2<<endl;
    return 0;
}

・STEP: 4 数字の文字列操作(0埋め)

/*
C++による「Cランクレベルアップメニュー 」問題集: 文字列
STEP: 4 数字の文字列操作(0埋め)
https://paiza.jp/works/mondai
提出コードの解答例
https://neguse-atama.hatenablog.com
*/
#include<bits/stdc++.h>
using namespace std;
int main(void){
    int n;
    cin>>n;
    if(n>=100){
        cout<<n<<endl;
    }else if(10<=n && n<100){
        cout<<"0"<<n<<endl;
    }else{
        cout<<"00"<<n<<endl;
    }
    return 0;
}

・STEP: 5 数字の文字列操作(時刻1)

/*
C++による「Cランクレベルアップメニュー 」問題集: 文字列
STEP: 5 数字の文字列操作(時刻1)
https://paiza.jp/works/mondai
提出コードの解答例
https://neguse-atama.hatenablog.com
*/
#include<bits/stdc++.h>
using namespace std;
int main(void){
    char s[5];
    cin>>s;
    for(int i=0;i<5;i++){
        if((i==0 || i==3) && s[i]!='0'){
            cout<<s[i];
        }else if((i==0 || i==3) && s[i]=='0'){
            
        }else if(i==2){
            cout<<endl;
        }else{
            cout<<s[i];
        }
    }
    return 0;
}

・STEP: 6 数字の文字列操作(時刻2)

/*
C++による「Cランクレベルアップメニュー 」問題集: 文字列
STEP: 6 数字の文字列操作(時刻2)
https://paiza.jp/works/mondai
提出コードの解答例
https://neguse-atama.hatenablog.com
*/
#include<bits/stdc++.h>
using namespace std;
int main(void){
    char s[5];
    for(int i=0;i<5;i++){
        cin>>s[i];
    }
    int min=(s[3]-48)*10+(s[4]-48);
    min+=30;
    if(min<60){
        cout<<s[0]<<s[1];
        cout<<":";
        cout<<min;
        cout<<endl;
    }else{
        min-=60;
        s[1]+=1;
        cout<<s[0]<<s[1];
        cout<<":";
        if(min<10){
            cout<<"0"<<min;
        }else{
            cout<<min;
        }
        cout<<endl;
    }
    return 0;
}

・FINAL問題: 文字列

/*
C++による「Cランクレベルアップメニュー 」問題集: 文字列
FINAL問題: 文字列
https://paiza.jp/works/mondai
提出コードの解答例
https://neguse-atama.hatenablog.com
*/
#include<bits/stdc++.h>
using namespace std;
int main(void){
    int n;
    cin>>n;
    for(int i=0;i<n;i++){
        char t[5];
        int h,m;
        for(int j=0;j<5;j++){
            cin>>t[j];
        }
        cin>>h>>m;
        int ans=(t[0]-48)*10+(t[1]-48)+h;
        int ans1=(t[3]-48)*10+(t[4]-48)+m;
        if(ans1>=60){
            ans1-=60;
            ans+=1;
        }
        
        if(ans>=24){
            ans-=24;
        }
        
        if(ans<10){
            cout<<"0"<<ans<<":";
        }else{
            cout<<ans<<":";
        }
        if(ans1<10){
            cout<<"0"<<ans1<<endl;
        }else{
            cout<<ans1<<endl;
        }
    }
    return 0;
}

paizaラーニングのレベルアップ問題集については、ユーザー同士で解答を教え合ったり、コードを公開したりするのは自由としています。
また授業や研修、教材などにも利用できるそうです。