落書きノート

ふと自分が気になった事を書いてます

C++で問題を解く

なかなか頭を使わせてくれる問題がまだありますね。なんとか解けました。

#include <iostream>
#include <cstring>
#include <cstdlib>

using namespace std;

template <class Type> Type minof(const Type a[], int n){
    Type min = a[0];

    for(int i = 0; i < n; i++){
        if(a[i] < min) min = a[i];
    }

    return min;
}

template <> const char* minof<const char*>(const char* const a[], int n){
    const char* min = a[0];

    for(int i = 0; i < n; i++){
        if(strcmp(a[i], min) < 0) min = a[i];
    }

    return min;
}

int main(void){
    int a[5];
    char** s1 = (char**)calloc(16, sizeof(char));

    for(int i = 0; i < 3; i++){
        *(s1 + i) = (char*)calloc(16, sizeof(char)); 
    }

    const char* s2[] = {
        "OS X", "Windows", "Linux", "UNIX"
    };

    cout << "int型配列aの要素の値を5つ入力せよ。" << endl;

    for(int i = 0; i < 5; i++){
        cout << "a[" << i << "] : ";
        cin >> a[i];
    }

    cout << "文字列配列s1の要素の値を入力せよ。" << endl;

    for(int i = 0; i < 3; i++){
        cout << "s1[" << i << "] : ";
        cin >> s1[i];
    }

    cout << "文字列配列s2の要素は以下のとおりです。" << endl;

    for(int i = 0; i < 4; i++){
        cout << "s2[" << i << "] = " << s2[i] << endl;
    }
    
    cout << "配列aの最小値は" << minof(a, 5) << "です。" << endl;
    cout << "配列s1の最小値は" << minof<const char*>(s1, 3) << "です。" << endl;
    cout << "配列s2の最小値は" << minof(s2, 4) << "です。" << endl;

    free(s1);

    return 0;
}

q9-6.cpp

#include <iostream>

using namespace std;

extern int sum(const int& a, const int& b = 1);

int main(void){
  int x,y;

  cout << "整数X : ";
  cin >> x;
  cout << "整数Y : ";
  cin >> y;

  cout << "1からyまでの合計は" << sum(y) << "です。" << endl;
  cout << "xからyまでの合計は" << sum(y, x) << "です。" << endl;

  return 0;
}

q9-6-sum.cpp

int sum(const int& a, const int& b = 1){
  int total = 0;

  for(int i = b; i <= a; i++){
    total += i;
  }

  return total;
}