IT・ビッグデータ徒然ブログ

関西でインフラ、データ基盤系のエンジニアになりたい

AtCoderに登録したら解くべき精選過去問10問の類題をC++で解いてみた(その5)

最近サボってた。 ABC 083 B - Some Sumsの類題を解く。

ABC 080 B - Harshad Number + 与えられた数値を10で割っていきながら各位の値を足し算していく。 + その後、足し算した値で割り切れるかどうかを判定。

#include <iostream>


using namespace std;

int main() {
    int N,i,sum;

    cin >> N;
    i = N;
    while(i > 0){
        sum += i % 10;
        i /= 10;
    }

    if(N % sum == 0){
        cout << "Yes" << endl;
    } else {
        cout << "No" << endl;
    }
    return 0;
}

ABC 090 B - Palindromic Numbers

  • 与えられた数値の範囲内でループを回す
  • ループごとに各位の値を分解して配列にわたす
  • 一の位と一万の位、ならびに十の位と千の位の値が同じかどうか判定する
#include <iostream>


using namespace std;

int main() {
    int i,j,k,first,last,digits[10];
    int counter = 0;

    cin >> first >> last;
    
    for(i = first; i <= last; i++){

        j = i;
        k = 0;
        while(j > 0) {
            digits[k] = j % 10;
            cout << digits[k] << endl;
            j /= 10;
            k++;
        }

        if(digits[0] == digits[4] && digits[1] == digits[3]){
            counter++;
        }
    }

    cout << counter << endl;

    return 0;
}

続いて第6問(ABC 088 B - Card Game for Two )の類題。

ABC 067 B - Snake Toy

  • とりあえずソートさせて終わり。
  • もうちょっとだけ補足すると、数値を大きい順番に並べ替えて順番に足し算していきます。
#include <iostream>
#include <algorithm>

using namespace std;

int main() {
    int i,N,rods;
    int rod[60];
    int maxlength = 0;
    int length = 0;

    cin >> N >> rods;
    for(i = 0; i < N; i++){
        cin >> rod[i];
    }

    sort(rod,rod+N,greater<int>());

    for(i = 0; i < rods;i++){
        length += rod[i];
    }
    
    if(maxlength <= length) {
        maxlength = length;
    }
    cout << maxlength << endl;

    return 0;
}

ABC 064 B - Traveling AtCoDeer Problem

  • 最初は問題文を読んで??となったのですが、要するに与えられた値から最小と最大の値を抜き出してその差をとることだとわかってからはそこまで苦労しなかった。
  • ソートしたほうが早かったかも。
#include <iostream>
#include <algorithm>

using namespace std;

int main() {
    int i,N,coodinates[1100];
    int maxcoodinate = 0;
    int mincoodinate = 0;
    

    cin >> N;

    for(i = 0; i < N; i++) {
        cin >> coodinates[i];
    }
    mincoodinate = coodinates[0];
    maxcoodinate = coodinates[0];

    for(i = 1; i < N; i++) {
        if(coodinates[i] <= mincoodinate) {
            mincoodinate = coodinates[i];
        }
        if(coodinates[i] >= maxcoodinate) {
            maxcoodinate = coodinates[i];
        }
    }

    cout << maxcoodinate - mincoodinate << endl;

    

    return 0;
}

ABC 042 B - Iroha Loves Strings

  • 文字列のソート処理
  • ソートさせたあと、順番に文字列連結させてます。
#include <iostream>
#include <algorithm>
#include <string>
 
using namespace std;
int main() {
    int i,N,L;
    cin >> N >> L;
    string str[110];
    string concat = "";
 
    for(i = 0; i < N ; i++) {
        cin >> str[i];
    }
 
    sort(str,str+N);
 
    for(i = 0; i < N; i++) {
        concat += str[i];
    }
    cout << concat << endl;
    return 0;
}