ios21 0 / 0 / 0 Регистрация: 11.12.2017 Сообщений: 76 |
||||
1 |
||||
11.12.2017, 21:30. Показов 10136. Ответов 5 Метки нет (Все метки)
Код есть, но не знаю как подправить, выводит массив целиком
0 |
1718 / 567 / 187 Регистрация: 12.03.2016 Сообщений: 2,169 |
|
11.12.2017, 22:02 |
2 |
Сообщение было отмечено Kuzia domovenok как решение РешениеЭтот код по идее и компилиться не должен, не то что еще 3 наибольших находить.
1 |
Gaveyn 99 / 98 / 11 Регистрация: 12.09.2016 Сообщений: 195 |
||||
12.12.2017, 00:08 |
3 |
|||
Ты сначала говоришь что у тебя есть целая константа N=20,в следующей строке ты уже говоришь что это у тебя просто целое число,а потом предлагаешь пользователю его ввести!
2 |
Lyumary 3 / 3 / 3 Регистрация: 10.12.2017 Сообщений: 3 |
||||||||
12.12.2017, 02:41 |
4 |
|||||||
Сообщение было отмечено ios21 как решение Решение
+STL
2 |
kolit 12 / 9 / 5 Регистрация: 02.06.2012 Сообщений: 25 |
||||
12.12.2017, 03:56 |
5 |
|||
вот как пример работы со статическим и динамическим массивом программа создает динамический массив случайных чисел и находит sizeLargestArr=3 наибольших числа.
1 |
12 / 9 / 5 Регистрация: 02.06.2012 Сообщений: 25 |
|
12.12.2017, 04:02 |
6 |
результат работы программы:
1 |
Given an array with all distinct elements, find the largest three elements. Expected time complexity is O(n) and extra space is O(1).
Examples :
Input: arr[] = {10, 4, 3, 50, 23, 90} Output: 90, 50, 23
Method 1:
Algorithm:
1) Initialize the largest three elements as minus infinite. first = second = third = -∞ 2) Iterate through all elements of array. a) Let current array element be x. b) If (x > first) { // This order of assignment is important third = second second = first first = x } c) Else if (x > second and x != first) { third = second second = x } d) Else if (x > third and x != second) { third = x } 3) Print first, second and third.
Below is the implementation of the above algorithm.
C++
#include <bits/stdc++.h>
using
namespace
std;
void
print3largest(
int
arr[],
int
arr_size)
{
int
first, second, third;
if
(arr_size < 3)
{
cout <<
" Invalid Input "
;
return
;
}
third = first = second = INT_MIN;
for
(
int
i = 0; i < arr_size; i++)
{
if
(arr[i] > first)
{
third = second;
second = first;
first = arr[i];
}
else
if
(arr[i] > second && arr[i] != first)
{
third = second;
second = arr[i];
}
else
if
(arr[i] > third && arr[i] != second)
third = arr[i];
}
cout <<
"Three largest elements are "
<< first <<
" "
<< second <<
" "
<< third << endl;
}
int
main()
{
int
arr[] = { 12, 13, 1, 10, 34, 11 };
int
n =
sizeof
(arr) /
sizeof
(arr[0]);
print3largest(arr, n);
return
0;
}
C
#include <limits.h> /* For INT_MIN */
#include <stdio.h>
void
print3largest(
int
arr[],
int
arr_size)
{
int
i, first, second, third;
if
(arr_size < 3) {
printf
(
" Invalid Input "
);
return
;
}
third = first = second = INT_MIN;
for
(i = 0; i < arr_size; i++) {
if
(arr[i] > first) {
third = second;
second = first;
first = arr[i];
}
else
if
(arr[i] > second) {
third = second;
second = arr[i];
}
else
if
(arr[i] > third)
third = arr[i];
}
printf
(
"Three largest elements are %d %d %dn"
, first, second, third);
}
int
main()
{
int
arr[] = { 12, 13, 1, 10, 34, 1 };
int
n =
sizeof
(arr) /
sizeof
(arr[0]);
print3largest(arr, n);
return
0;
}
Java
class
PrintLargest {
static
void
print3largest(
int
arr[],
int
arr_size)
{
int
i, first, second, third;
if
(arr_size <
3
) {
System.out.print(
" Invalid Input "
);
return
;
}
third = first = second = Integer.MIN_VALUE;
for
(i =
0
; i < arr_size; i++) {
if
(arr[i] > first) {
third = second;
second = first;
first = arr[i];
}
else
if
(arr[i] > second) {
third = second;
second = arr[i];
}
else
if
(arr[i] > third)
third = arr[i];
}
System.out.println(
"Three largest elements are "
+ first +
" "
+ second +
" "
+ third);
}
public
static
void
main(String[] args)
{
int
arr[] = {
12
,
13
,
1
,
10
,
34
,
1
};
int
n = arr.length;
print3largest(arr, n);
}
}
Python3
import
sys
def
print3largest(arr, arr_size):
if
(arr_size <
3
):
print
(
" Invalid Input "
)
return
third
=
first
=
second
=
-
sys.maxsize
for
i
in
range
(
0
, arr_size):
if
(arr[i] > first):
third
=
second
second
=
first
first
=
arr[i]
elif
(arr[i] > second):
third
=
second
second
=
arr[i]
elif
(arr[i] > third):
third
=
arr[i]
print
(
"Three largest elements are"
,
first, second, third)
arr
=
[
12
,
13
,
1
,
10
,
34
,
1
]
n
=
len
(arr)
print3largest(arr, n)
C#
using
System;
class
PrintLargest {
static
void
print3largest(
int
[] arr,
int
arr_size)
{
int
i, first, second, third;
if
(arr_size < 3) {
Console.WriteLine(
"Invalid Input"
);
return
;
}
third = first = second = 000;
for
(i = 0; i < arr_size; i++) {
if
(arr[i] > first) {
third = second;
second = first;
first = arr[i];
}
else
if
(arr[i] > second && arr[i] != first) {
third = second;
second = arr[i];
}
else
if
(arr[i] > third && arr[i]!=second)
third = arr[i];
}
Console.WriteLine(
"Three largest elements are "
+ first +
" "
+ second +
" "
+ third);
}
public
static
void
Main()
{
int
[] arr =
new
int
[] { 12, 13, 1, 10, 34, 1 };
int
n = arr.Length;
print3largest(arr, n);
}
}
PHP
<?php
function
print3largest(
$arr
,
$arr_size
)
{
$i
;
$first
;
$second
;
$third
;
if
(
$arr_size
< 3)
{
echo
" Invalid Input "
;
return
;
}
$third
=
$first
=
$second
= PHP_INT_MIN;
for
(
$i
= 0;
$i
<
$arr_size
;
$i
++)
{
if
(
$arr
[
$i
] >
$first
)
{
$third
=
$second
;
$second
=
$first
;
$first
=
$arr
[
$i
];
}
else
if
(
$arr
[
$i
] >
$second
)
{
$third
=
$second
;
$second
=
$arr
[
$i
];
}
else
if
(
$arr
[
$i
] >
$third
)
$third
=
$arr
[
$i
];
}
echo
"Three largest elements are "
,
$first
,
" "
,
$second
,
" "
,
$third
;
}
$arr
=
array
(12, 13, 1,
10, 34, 1);
$n
=
count
(
$arr
);
print3largest(
$arr
,
$n
);
?>
Javascript
<script>
function
print3largest(arr, arr_size)
{
let first, second, third;
if
(arr_size < 3)
{
document.write(
" Invalid Input "
);
return
;
}
third = first = second = Number.MIN_VALUE;
for
(let i = 0; i < arr_size; i++)
{
if
(arr[i] > first)
{
third = second;
second = first;
first = arr[i];
}
else
if
(arr[i] > second)
{
third = second;
second = arr[i];
}
else
if
(arr[i] > third)
third = arr[i];
}
document.write(
"Three largest elements are "
+ first +
" "
+ second +
" "
+ third +
"<br>"
);
}
let arr = [ 12, 13, 1, 10, 34, 1 ];
let n = arr.length;
print3largest(arr, n);
</script>
Output
Three largest elements are 34 13 12
Time Complexity: O(n)
Auxiliary Space: O(1)
Method 2:
An efficient way to solve this problem is to use any O(nLogn) sorting algorithm & simply returning the last 3 largest elements.
C++
#include <bits/stdc++.h>
using
namespace
std;
void
find3largest(
int
arr[],
int
n)
{
sort(arr, arr + n);
int
check = 0, count = 1;
for
(
int
i = 1; i <= n; i++) {
if
(count < 4) {
if
(check != arr[n - i]) {
cout << arr[n - i] <<
" "
;
check = arr[n - i];
count++;
}
}
else
break
;
}
}
int
main()
{
int
arr[] = { 12, 45, 1, -1, 45, 54, 23, 5, 0, -10 };
int
n =
sizeof
(arr) /
sizeof
(arr[0]);
find3largest(arr, n);
}
C
#include <stdio.h>
#include <stdlib.h>
int
cmpfunc(
const
void
* a,
const
void
* b)
{
return
(*(
int
*)a - *(
int
*)b);
}
void
find3largest(
int
arr[],
int
n)
{
qsort
(arr, n,
sizeof
(
int
),
cmpfunc);
int
check = 0, count = 1;
for
(
int
i = 1; i <= n; i++) {
if
(count < 4) {
if
(check != arr[n - i]) {
printf
(
"%d "
, arr[n - i]);
check = arr[n - i];
count++;
}
}
else
break
;
}
}
int
main()
{
int
arr[] = { 12, 45, 1, -1, 45, 54, 23, 5, 0, -10 };
int
n =
sizeof
(arr) /
sizeof
(arr[0]);
find3largest(arr, n);
}
Java
import
java.io.*;
import
java.util.Arrays;
class
GFG {
void
find3largest(
int
[] arr)
{
Arrays.sort(arr);
int
n = arr.length;
int
check =
0
, count =
1
;
for
(
int
i =
1
; i <= n; i++) {
if
(count <
4
) {
if
(check != arr[n - i]) {
System.out.print(arr[n - i] +
" "
);
check = arr[n - i];
count++;
}
}
else
break
;
}
}
public
static
void
main(String[] args)
{
GFG obj =
new
GFG();
int
[] arr = {
12
,
45
,
1
, -
1
,
45
,
54
,
23
,
5
,
0
, -
10
};
obj.find3largest(arr);
}
}
Python3
def
find3largest(arr, n):
arr
=
sorted
(arr)
check
=
0
count
=
1
for
i
in
range
(
1
, n
+
1
):
if
(count <
4
):
if
(check !
=
arr[n
-
i]):
print
(arr[n
-
i], end
=
" "
)
check
=
arr[n
-
i]
count
+
=
1
else
:
break
arr
=
[
12
,
45
,
1
,
-
1
,
45
,
54
,
23
,
5
,
0
,
-
10
]
n
=
len
(arr)
find3largest(arr, n)
C#
using
System;
class
GFG {
void
find3largest(
int
[] arr)
{
Array.Sort(arr);
int
n = arr.Length;
int
check = 0, count = 1;
for
(
int
i = 1; i <= n; i++) {
if
(count < 4) {
if
(check != arr[n - i]) {
Console.Write(arr[n - i] +
" "
);
check = arr[n - i];
count++;
}
}
else
break
;
}
}
public
static
void
Main()
{
GFG obj =
new
GFG();
int
[] arr = { 12, 45, 1, -1, 45,
54, 23, 5, 0, -10 };
obj.find3largest(arr);
}
}
Javascript
<script>
function
find3largest(arr) {
arr.sort((a,b)=>a-b);
let check = 0, count = 1;
for
(let i = 1; i <= arr.length; i++) {
if
(count < 4) {
if
(check != arr[arr.length - i]) {
document.write(arr[arr.length - i] +
" "
);
check = arr[arr.length - i];
count++;
}
}
else
break
;
}
}
let arr = [ 12, 45, 1, -1, 45, 54, 23, 5, 0, -10 ];
find3largest(arr);
</script>
Time Complexity: O(n log n)
Auxiliary Space: O(1)
Method 3:
We can use Partial Sort of C++ STL. partial_sort uses Heapselect, which provides better performance than Quickselect for small M. As a side effect, the end state of Heapselect leaves you with a heap, which means that you get the first half of the Heapsort algorithm “for free”. The complexity is “approximately” O(N log(M)), where M is distance(middle-first).
C++
#include <bits/stdc++.h>
using
namespace
std;
int
main()
{
vector<
int
> V = { 11, 65, 193, 36, 209, 664, 32 };
partial_sort(V.begin(), V.begin() + 3, V.end(), greater<
int
>());
cout <<
"first = "
<< V[0] <<
"n"
;
cout <<
"second = "
<< V[1] <<
"n"
;
cout <<
"third = "
<< V[2] <<
"n"
;
return
0;
}
Java
import
java.io.*;
import
java.util.Arrays;
class
GFG{
public
static
void
main(String[] args)
{
int
[] V = {
11
,
65
,
193
,
36
,
209
,
664
,
32
};
Arrays.sort(V);
int
x = V.length;
System.out.println(
"first = "
+ V[x-
1
] );
System.out.println(
"second = "
+ V[x-
2
]);
System.out.println(
"third = "
+ V[x-
3
] );
}
}
Python3
V
=
[
11
,
65
,
193
,
36
,
209
,
664
,
32
];
V.sort()
V.reverse()
print
(f
"first = {V[0]}"
);
print
(f
"second = {V[1]}"
);
print
(f
"third = {V[2]}"
);
C#
using
System;
class
GFG
{
public
static
void
Main()
{
int
[] V = { 11, 65, 193, 36, 209, 664, 32 };
Array.Sort(V);
Array.Reverse(V);
Console.WriteLine(
"first = "
+ V[0] );
Console.WriteLine(
"second = "
+ V[1]);
Console.WriteLine(
"third = "
+ V[2] );
}
}
Javascript
<script>
let V = [ 11, 65, 193, 36, 209, 664, 32 ];
V.sort((a, b) => a - b)
V.reverse()
document.write(
"first = "
+ V[0] +
"<br>"
);
document.write(
"second = "
+ V[1] +
"<br>"
);
document.write(
"third = "
+ V[2] +
"<br>"
);
</script>
Output
first = 664 second = 209 third = 193
Time Complexity: O(n log m) where m is distance(middle-first).
Auxiliary Space: O(1)
Last Updated :
16 Nov, 2022
Like Article
Save Article
Нужно вывести три самых больших числа, но я не понимаю как это сделать.
int buf;
int max;
for (int i = 1; i <= 20; ++i) {
cout << "number " << i << ": ";
cin >> buf;
if (i == 1 || (i > 1 && buf > max)) {
max = buf;
}
}
cout << "Max: " << max;
diralik
9,2956 золотых знаков23 серебряных знака57 бронзовых знаков
задан 21 окт 2018 в 9:56
4
Для трёх чисел выгоднее всего, видимо, создать буфер на три наибольших элемента (по сути – очередь по приоритетам), положить первые числа в правильном порядке, а дальше проверять, не больше ли очередное число, чем наименьшее число в буфере. Если да, то вытеснять наименьшее число, и вставлять новое в нужное место.
ответ дан 21 окт 2018 в 10:14
MBoMBo
47.8k1 золотой знак17 серебряных знаков40 бронзовых знаков
13
#include <iostream>
using namespace std;
int main() {
int Arr[20];
for(int f=0; f <20; f++)
{
cin >> Arr[f];//ввод значений массива
}
for (int i = 0; i < 20; i++) { //сортировк
for (int j = 0; j < 19; j++) {
if (Arr[j] > Arr[j + 1]) {
int b = Arr[j];
Arr[j] = Arr[j + 1];
Arr[j + 1] = b;
}
}
}
for(int z=19; z >= 17; z--)
cout <<Arr[z]<<endl;
return 0;
}
ответ дан 21 окт 2018 в 10:19
spaisspais
4163 серебряных знака12 бронзовых знаков
2
script1adsense2code
script1adsense3code
C ++ Array: Упражнение-2 с решением
Напишите программу на C ++, чтобы найти три самых больших элемента в массиве.
Пример решения:
Код C ++:
#include<bits/stdc++.h>
using namespace std;
void three_largest(int arr[], int arr_size)
{
int i, first, second, third;
if (arr_size < 3)
{
cout << "Invalid Input";
}
third = first = second = INT_MIN;
for (i = 0; i < arr_size ; i ++)
{
if (arr[i] > first)
{
third = second;
second = first;
first = arr[i];
}
else if (arr[i] > second)
{
third = second;
second = arr[i];
}
else if (arr[i] > third)
third = arr[i];
}
cout << "nThree largest elements are: " <<first <<", "<< second <<", "<< third;
}
int main()
{
int nums[] = {7, 12, 9, 15, 19, 32, 56, 70};
int n = sizeof(nums)/sizeof(nums[0]);
cout << "Original array: ";
for (int i=0; i < n; i++)
cout << nums[i] <<" ";
three_largest(nums, n);
return 0;
}
Пример вывода:
Исходный массив: 7 12 9 15 19 32 56 70 Три крупнейших элемента: 70, 56, 32
Блок – схема:
Редактор кода C ++:
Внесите свой код и комментарии через Disqus.
Предыдущий: Напишите программу на C ++, чтобы найти самый большой элемент из данного массива целых чисел.
Далее: Напишите программу на C ++, чтобы найти второй по величине элемент в данном массиве целых чисел.
Каков уровень сложности этого упражнения?
Новый контент: Composer: менеджер зависимостей для PHP , R программирования
script1adsense5code
disqus2code
script1adsense6code
script1adsense7code
script1adsense8code
uses crt; const n=10; var a:array [1..n] of integer; i,max1,max2,max3,nmax1,nmax2,nmax3:integer; begin clrscr; randomize; writeln('Massive :'); for i:=1 to n do begin a[i]:=random(100); write(a[i],' '); end; writeln; max1:=-maxint; max2:=-maxint; max3:=-maxint; for i:=1 to n do if a[i]>max1 then begin max1:=a[i]; nmax1:=i; end; for i:=1 to n do if a[i]>max2 then if i<>nmax1 then begin max2:=a[i]; nmax2:=i; end; for i:=1 to n do if a[i]>max3 then if (i<>nmax1) and (i<>nmax2) then begin max3:=a[i]; nmax3:=i; end; writeln; writeln('Max 1 = a[',nmax1,']=',max1); writeln('Max 2 = a[',nmax2,']=',max2); writeln('Max 3 = a[',nmax3,']=',max3); readkey; end.