fork download
  1. #include <iostream>
  2. #include <cmath>
  3. #include <cstdlib>
  4. #include <ctime>
  5.  
  6. using namespace std;
  7.  
  8. int
  9. pos(int s, int row, int col)
  10. {
  11. if (row > col) {
  12. int tmp = row;
  13. row = col;
  14. col = tmp;
  15. }
  16. return (col - row + (s + s - row + 1) * row / 2);
  17. }
  18.  
  19. void
  20. print_matrix1(int a[], int n)
  21. {
  22. for (int i = 0; i < n; ++i) {
  23. for (int j = 0; j < n; ++j) {
  24. cout << a[pos(n, i, j)] << " ";
  25. }
  26. cout << endl;
  27. }
  28. }
  29.  
  30. void
  31. print_matrix2(int a[], int n)
  32. {
  33. for (int i = 0; i < n; ++i) {
  34. for (int j = 0; j < n; ++j) {
  35. cout << a[n * i + j] << " ";
  36. }
  37. cout << endl;
  38. }
  39. }
  40.  
  41. int
  42. main()
  43. {
  44. srand(time(NULL));
  45. int count;
  46. cin >> count;
  47. int n = (sqrt(8 * count + 1) - 1) / 2;
  48. int a[count], b[count], c[n * n];
  49. for (int i = 0; i < count; ++i) {
  50. a[i] = rand() % 41 - 20;
  51. b[i] = rand() % 41 - 20;
  52. }
  53. for (int i = 0; i < n; ++i) {
  54. for (int j = 0; j < n; ++j) {
  55. int tmp = 0;
  56. for (int k = 0; k < n; ++k) {
  57. tmp += a[pos(n, i, k)] * b[pos(n, k, j)];
  58. }
  59. c[n * i + j] = tmp;
  60. }
  61. }
  62. cout << "A:" << endl;
  63. print_matrix1(a, n);
  64. cout << "B:" << endl;
  65. print_matrix1(b, n);
  66. cout << "C:" << endl;
  67. print_matrix2(c, n);
  68. }
Success #stdin #stdout 0s 2904KB
stdin
6
stdout
A:
11 -5 14 
-5 19 4 
14 4 15 
B:
16 -5 4 
-5 -4 9 
4 9 16 
C:
257 91 223 
-159 -15 215 
264 49 332