Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
xmaster
Сообщений: n/a
#1

Если массив является перестановкой, т.е. содержит все числа от 1 до N, то вывести 0 - C++

22.03.2012, 02:27. Просмотров 668. Ответов 6
Метки нет (Все метки)

Array49. Дан целочисленный массив размера N. Если он является перестановкой, т. е. содержит все числа от 1 до N, то вывести 0; в противном случае вывести номер первого недопустимого элемента.

Вот решение на Паскале.

Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
Program Array49;
const
n=10;
var
arr:array[1..n]of integer;
tem:array[1..n]of integer;
i,j,temi:integer;
flag,flag1:boolean;pos:integer;
Begin
temi:=1;
for I:=1 to n do readln(arr[i]);
flag1:=true;
for i:=1 to n do 
begin
flag:=true;
for j:=1 to n do 
begin
if(arr[i]=arr[j])then flag:=false;
end;
if flag and((1<arr[i])and(arr[i]<n))then begin tem[temi]:=arr[i];inc(temi);end
else begin break; flag1:=false;pos:=i; end;
end;
if(flag1)then writeln('0')
else writeln(pos)
end.
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.03.2012, 02:27
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Если массив является перестановкой, т.е. содержит все числа от 1 до N, то вывести 0 (C++):

Вектор. Если он является перестановкой, то есть содержит все числа от 1 до N, то вывести 0 - C++
Дан целочисленный контейнер vector. Если он является перестановкой, то есть содержит все числа от 1 до N, то вывести 0, а в противном...

While4°. Дано целое число N (> 0). Если оно является степенью числа 3, то вывести true, если не является — вывести false. - C++
While. Дано целое число N (&gt; 0). Если оно является степенью числа 3, то вывести true, если не является — вывести false.

Дано целое число N(>0). Если оно является степенью числа 3, то вывести TRUE, если не является-вывести FALSE. - C++
Дано целое число N(&gt;0). Если оно является степенью числа 3, то вывести TRUE, если не является-вывести FALSE. Я не могу записать её с...

Дан целый массив. выяснить имеются ли в нем числа, состоящие только из четных цифр. Если да, то вывести все найденные числа и их порядковые номера - C++
#include &lt;iostream&gt;#include &lt;clocale&gt;using namespace std;bool f (int num){ bool fl=false; while (num!=0) {int s=num % 10; if (s % 2==0) ...

если массив не является знакочередующимся,то удалить из массива все положительные числа,в противном случае-удалить отрицательные элементы.после удален - C++
задан массив Х целых чисел. если массив не является знакочередующимся,то удалить из массива все положительные числа,в противном...

Если x является степенью числа n, то вывести true - C++
Нужно составить циклы с операторами while, do while, for. Вот условие: Даны целые числа x (&gt;0) и n (&gt;0). Если x является степенью числа...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Dekio
Фрилансер
Эксперт С++
5837 / 1218 / 214
Регистрация: 23.11.2010
Сообщений: 3,378
Записей в блоге: 1
22.03.2012, 16:32 #2
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
Решение на паскале не соответствует условию

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <iostream>
#include <algorithm>
#include <iomanip>
#include <vector>
 
int main()
{
    std::vector <int> vec = {2, 3, 1, 5, 5, 4};
    auto Cnt = 0;
    auto aRes = std::find_if(vec.begin(), vec.end(), [&vec, &Cnt] (int num) -> bool 
    { 
        return  num < 1 || num > vec.size() || std::find(vec.begin(), vec.begin() + ++Cnt, num) != vec.begin() + Cnt;
    });
    if(aRes != vec.end())
        std::cout<<aRes - vec.begin()<<std::endl;
    else
        std::cout<<0<<std::endl;
    system("pause");
    return 0;
}
http://ideone.com/hDBUK

Может быть предупреждение об использовании signed и unsigned значения переменных, но в этом случае его можно пропустить
2
go
22.03.2012, 22:27
  #3

Не по теме:

Dekio, классное решение

1
Gepar
1177 / 533 / 20
Регистрация: 01.07.2009
Сообщений: 3,517
22.03.2012, 22:36 #4
Цитата Сообщение от Dekio Посмотреть сообщение
C++
1
2
3
4
auto aRes = std::find_if(vec.begin(), vec.end(), [&vec, &Cnt] (int num) -> bool 
 { 
 return num < 1 || num > vec.size() || std::find(vec.begin(), vec.begin() + ++Cnt, num) != vec.begin() + Cnt;
 });
А можно прокомментировать эту конструкцию. Непонятно начинаю отсюдова
C++
1
[&vec, &Cnt]
Что это вообще такое?
0
Dekio
Фрилансер
Эксперт С++
5837 / 1218 / 214
Регистрация: 23.11.2010
Сообщений: 3,378
Записей в блоге: 1
22.03.2012, 22:40 #5
Gepar, я заметил 3 проблемы в задании.
1. число больше диапазона 1..n
2. число меньше диапазона 1..n
3. число в диапазоне, но дублируется, соответственно не может быть выборкой всех элементов от 1 до n.

Цитата Сообщение от Gepar Посмотреть сообщение
[&vec, &Cnt]
Что это вообще такое?
Передаем в лямбду вектор (можно размер передавать через переменную) и переменную которая будет считать текущую итерацию.



Цитата Сообщение от Gepar Посмотреть сообщение
return num < 1 || num > vec.size() || std::find(vec.begin(), vec.begin() + ++Cnt, num) != vec.begin() + Cnt
Условие, если число меньше 1, больше n, или дублируется, то мы его находим.
1
Gepar
1177 / 533 / 20
Регистрация: 01.07.2009
Сообщений: 3,517
22.03.2012, 22:44 #6
Цитата Сообщение от Dekio Посмотреть сообщение
Условие, если число меньше 1, больше n, или дублируется, то мы его находим.
Ну тут понятно, но вот по поводу лямбда функций с определением на месте же я не разобрался. Нужно сначала почитать с++11 наверное, я так и не читал его.
0
Dekio
Фрилансер
Эксперт С++
5837 / 1218 / 214
Регистрация: 23.11.2010
Сообщений: 3,378
Записей в блоге: 1
22.03.2012, 23:04 #7
Gepar, коротко можно ознакомиться

http://ru.wikipedia.org/wiki/C%2B%2B11
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.03.2012, 23:04
Привет! Вот еще темы с ответами:

Если цифра младшего разряда четная, то вывести все четные цифры числа, в противном случае – все нечетные - C++
Дано n-значное число longInt. Написать программу. Если цифра младшего разряда четная, то вывести все четные цифры числа, в противном...

Дан массив F[0:n-1].Сформировать два новых массива: первый содержит элементы, не превышающие заданного числа, а второй - все остальные - C++
Помогите пожалуйста.Нужен полный текст программы, заранее благодарен

Определить, является ли значение целочисленной переменной х четным. Если является, то вывести на печать значен - C++
Определить, является ли значение целочисленной переменной х четным. Если является, то вывести на печать значение х, в противном случае...

Одномерный массив. Вывести на экран все числа, индексы которых есть простые числа. - C++
Нужно вывести на экран все числа заданной последовательности, индексы которых есть простые числа. Определить в заданной последовательности...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
22.03.2012, 23:04
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru