落書きノート

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

C++で問題を解く

C++11の機能を使いかけましたが、なんとかC++STL止まりに抑えておきました。以下のようになります。3つあります。

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

using namespace std;

int main(void){
  const int n = 7;
  int a[n];

  memset(a, 0, sizeof(a));
  srand(time(NULL));

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

  for(int i = n - 1; i > 0; i--){
    int j = rand() % (i + 1);
    if(i != j){
      int t = a[i];
      a[i] = a[j];
      a[j] = t;
    }
  }

  cout << "シャッフルしました。" << endl;

  for(int i = 0; i < n; i++){
    cout << "a[" << i << "] = " << a[i] << endl;
  }

  return 0;
}
#include <iostream>
#include <cstring>
#include <algorithm>

using namespace std;

int n_f = 0;

void display(int i){
  cout << "a[" << n_f++ << "] = " << i << endl;
}

int main(void){
  const int n = 5;
  int a[n];
  int b[n];
  int len = sizeof(a) / sizeof(int);

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

  cout << "sortメソッドで通常ソート" << endl;
  sort(a, a + len);
  for_each(&a[0], &a[n], display);

  n_f = 0;

  cout << "sortメソッドで降順ソート" << endl;
  sort(a, a + len, greater<int>());
  for_each(&a[0], &a[n], display);

  n_f = 0;

  cout << "配列aから配列bにコピー" << endl;
  sort(a, a + len);
  memcpy(b, a, sizeof(b));
  for_each(&b[0], &b[n], display);

  return 0;
}
#include <iomanip>
#include <iostream>

using namespace std;

int main(void){
  int a[4][3];
  int b[3][4];
  int c[4][4];

  cout << "行列a" << endl;

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

  cout << "行列b" << endl;

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

  for(int i = 0; i < 4; i++){
    for(int j = 0; j < 4; j++){
      c[i][j] = 0;
      for(int k = 0; k < 3; k++){
        c[i][j] += a[i][k] * b[k][j];
      }
    }
  }

  cout << "行列a" << endl;

  for(int i = 0; i < 4; i++){
    for(int j = 0; j < 3; j++){
      cout << setw(4) << a[i][j];
    }
    cout << endl;
  }

  cout << "行列b" << endl;

  for(int i = 0; i < 3; i++){
    for(int j = 0; j < 4; j++){
      cout << setw(4) << b[i][j];
    }
    cout << endl;
  }

  cout << "aとbの積" << endl;

  for(int i = 0; i < 4; i++){
    for(int j = 0; j < 4; j++){
      cout << setw(4) << c[i][j];
    }
    cout << endl;
  }

  return 0;
}

最近は以前ほど頭が回りませんが、それをカバーするための頭の使い方が身についたような感じがします。落ち着いてきたんですかね。この3つ目のソースコードを見る限り、まだ元気かもしれないと思いましたけど。