寝癖頭の解法

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

Aizu Online Judge in C++ #ITP1_8_A~D(4 problems)

Aizu Online Judge(AOJ)の過去問から、C++による提出コードの解答例です。
Introduction to Programming IよりTopic # 8のAからDまでの計4問です。
https://onlinejudge.u-aizu.ac.jp/courses/lesson/2/ITP1/8

Topic # 8 "Character"

・ITP1_8_A : Toggling Cases
https://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=ITP1_8_A
・ITP1_8_B : Sum of Numbers
https://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=ITP1_8_B
・ITP1_8_C : Counting Characters
https://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=ITP1_8_C
・ITP1_8_D : Ring
https://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=ITP1_8_D

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

・ITP1_8_A : Toggling Cases
https://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=ITP1_8_A

/*
ITP1_8_A : Toggling Cases
https://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=ITP1_8_A
 提出コードの解答例
 https://neguse-atama.hatenablog.com
*/
#include<bits/stdc++.h>
using namespace std;
int main(void){
    string s;
    getline(cin,s);
    locale l=locale::classic();
    for(int i=0;i<s.size();i++){
        if(isupper(s[i])){
            cout<<tolower(s[i],l);
        }else if(islower(s[i])){
            cout<<toupper(s[i],l);
        }else{
            cout<<s[i];
        }
    }
    cout<<endl;
    return 0;
}

・ITP1_8_B : Sum of Numbers
https://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=ITP1_8_B

/*
ITP1_8_B : Sum of Numbers
https://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=ITP1_8_B
 提出コードの解答例
 https://neguse-atama.hatenablog.com
*/
#include<bits/stdc++.h>
using namespace std;
int main(void){
    vector<string> x;
    while(1){
        string i;
        cin>>i;
        if(i=="0"){
            break;
        }
        x.push_back(i);
    }
    for(int i=0;i<x.size();i++){
        int sum=0;
        for(int j=0;j<x[i].size();j++){
            sum+=(x[i].at(j)-48);
        }
        cout<<sum<<endl;
    }
    return 0;
}

・ITP1_8_C : Counting Characters
https://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=ITP1_8_C

/*
ITP1_8_C : Counting Characters
https://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=ITP1_8_C
 提出コードの解答例
 https://neguse-atama.hatenablog.com
*/
#include<bits/stdc++.h>
using namespace std;
int main(void){
    vector<string> s;
    while(1){
        string str;
        cin>>str;
        if(cin.eof()){
            break;
        }
        transform(str.begin(),str.end(),str.begin(),::tolower);
        s.push_back(str);
    }
    vector<int> ans(26,0);
    for(int i=0;i<s.size();i++){
        for(int j=0;j<26;j++){
            char c=(char)j+97;
            for(int k=0;k<s[i].size();k++){
                if(s[i].at(k)==c){
                    ans[j]++;
                }
            }
        }
    }
    for(int i=0;i<26;i++){
        char c=(char)i+97;
        cout<<c<<" : "<<ans[i]<<endl;
    }
    return 0;
}

・ITP1_8_D : Ring
https://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=ITP1_8_D

/*
ITP1_8_D : Ring
https://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=ITP1_8_D
 提出コードの解答例
 https://neguse-atama.hatenablog.com
*/
#include<bits/stdc++.h>
using namespace std;
namespace mine{
    std::string to_string(char c){
        return std::string(1,c);
    }
}
int main(void){
    string s,p;
    cin>>s>>p;
    int m=(int)s.size();
    int n=(int)p.size();
    for(int i=0;i<m;i++){
        string str="";
        if(n>m-i){
            for(int j=i;j<m;j++){
                str+=mine::to_string(s[j]);
            }
            for(int j=0;j<n-m+i;j++){
                str+=mine::to_string(s[j]);
            }
        }else{
            for(int j=i;j<i+n;j++){
                str+=mine::to_string(s[j]);
            }
        }
        if(p==str){
            cout<<"Yes"<<endl;
            return 0;
        }
    }
    cout<<"No"<<endl;
}

設問の出典は、プログラミング問題のオンライン採点システム「Aizu Online Judge(AOJ)」です。
http://judge.u-aizu.ac.jp/onlinejudge/