1
- #include < stdio.h>
1
+ #include < cstdio>
2
+ #include < cstdlib>
3
+ #include < ctime>
2
4
#include " array.h"
3
5
6
+ void qsort (Array *arr, size_t start, size_t end){
7
+ if (start >= end) return ;
8
+
9
+ size_t left = start;
10
+ size_t right = end;
11
+ Data pivot = array_get (arr, start + (end - start) / 2 );
12
+
13
+ while (left <= right){
14
+ while (array_get (arr, left) < pivot) left++;
15
+ while (array_get (arr, right) > pivot) right--;
16
+
17
+ if (left <= right){
18
+ Data temp = array_get (arr, right);
19
+ array_set (arr, right, array_get (arr, left));
20
+ array_set (arr, left, temp);
21
+ left++; right--;
22
+ if (right > end) right++;
23
+
24
+ }
25
+ }
26
+
27
+ qsort (arr, start, right);
28
+ qsort (arr, left, end);
29
+ }
30
+
4
31
Array *array_create_and_read (FILE *input)
5
32
{
6
33
int n;
@@ -17,24 +44,74 @@ Array *array_create_and_read(FILE *input)
17
44
return arr;
18
45
}
19
46
20
- void task1 (Array *arr )
47
+ void task1 (void )
21
48
{
49
+ size_t n;
50
+ Array *arr = NULL ;
51
+ scanf (" %lu" , &n);
52
+ arr = array_create (n);
53
+ for (size_t index {0 }; index < n; ++index ) array_set (arr, index , rand () % 100 );
54
+
55
+ for (size_t index {0 }; index < array_size (arr); ++index ){
56
+ if (array_get (arr, index ) % 2 == 0 )
57
+ array_set (arr, index , array_get (arr, index ) * array_get (arr, index ));
58
+ else array_set (arr, index , 2 * array_get (arr, index ));
59
+ }
60
+
61
+ array_delete (arr);
22
62
}
23
63
24
- void task2 (Array *arr )
64
+ void task2 (void )
25
65
{
66
+ size_t size_arr;
67
+ Array *arr = NULL ;
68
+ scanf (" %lu" , &size_arr);
69
+ arr = array_create (size_arr);
70
+ for (size_t index {0 }; index < size_arr; ++index ) array_set (arr, index , rand () % 100 );
71
+ qsort (arr, 0 , size_arr - 1 );
72
+
73
+ for (size_t index {1 }; index < size_arr; ++index ){
74
+ if (index == (size_arr - 1 )){
75
+ if (index == 1 ){
76
+ if (array_get (arr, 0 ) == array_get (arr, 1 )) printf (" %d " , array_get (arr, 0 ));
77
+ continue ;
78
+ }
79
+ if ((array_get (arr, index - 1 ) == array_get (arr, index )) && (array_get (arr, index - 2 ) != array_get (arr, index )))
80
+ printf (" %d " , array_get (arr, index ));
81
+ continue ;
82
+ };
83
+
84
+ if (array_get (arr, index ) != array_get (arr, index + 1 )){
85
+ if (index == 1 ) {
86
+ if (array_get (arr, 0 ) == array_get (arr, 1 ))
87
+ printf (" %d " , array_get (arr, 1 ));
88
+ continue ;
89
+ }
90
+
91
+ if ((array_get (arr, index - 1 ) == array_get (arr, index )) && (array_get (arr, index - 2 ) != array_get (arr, index )))
92
+ printf (" %d " , array_get (arr, index ));
93
+ }
94
+ }
95
+
96
+ array_delete (arr);
97
+ printf (" \n " );
26
98
}
27
99
28
100
int main (int argc, char **argv)
29
101
{
30
- Array *arr = NULL ;
31
- FILE *input = fopen (argv[1 ], " r" );
32
- arr = array_create_and_read (input);
33
- task1 (arr);
34
- array_delete (arr);
35
- /* Create another array here */
36
- arr = array_create_and_read (input);
37
- task2 (arr);
38
- array_delete (arr);
39
- fclose (input);
102
+ if (argc > 1 ){
103
+ Array *arr = NULL ;
104
+ FILE *input = fopen (argv[1 ], " r" );
105
+ arr = array_create_and_read (input);
106
+ array_delete (arr);
107
+ /* Create another array here */
108
+ arr = array_create_and_read (input);
109
+ array_delete (arr);
110
+ fclose (input);
111
+ }
112
+
113
+ task1 ();
114
+ task2 ();
115
+
116
+ return 0 ;
40
117
}
0 commit comments