2014-12-09 2 views
0

я вошел 4 числа в массив с помощьюКак проверить значение в массиве

for (int i=0;i<4;i++) 
{ 
    cin >> choice[i]; 
} 

Мне нужно, чтобы проверить, был ли я вписал номера 1,3,4,6 (в любом порядке), в массив

например: -

if choice[0] == 1 && choice[1] == 3 && choice[2] == 4 && choice[3] == 6 

else if ........ 1,3,6,4 

else if..........1,6,3,4 

else if.......1,6,4,3 

else if......1,4,6,3 

else if......1,4,3,6 

.... 
.... 

else if.....6,4,3,1 

этот тип проверки делает мой код слишком большой.

Пожалуйста, помогите мне с альтернативным способом

+0

_ «в любом порядке» _ Просто повторите цикл и проверьте, правильно ли вы нашли все четыре (подсчитайте действительные числа). –

+2

Сортируйте массив, а затем сравните его с 1, 3, 4, 6. –

+1

Этот вопрос показывает исследовательские усилия (по крайней мере, некоторые), это понятно и (при определенных условиях) полезно. Почему вниз вниз? – TobiMcNamobi

ответ

2
bool count1=false; 
bool count2=false; 
bool count3=false; 
bool count4=false; 

for (int i=0;i<4;i++) 
{ 
cin >> choice[i]; 
if(choice[i]==1) count1==true; 
else if(choice[i]==3) count2=true; 
else if(choice[i]==4) count3=true; 
else if(choice[i]==6) count4=true; 
} 

if(count1 && count2 && count3 && count4) cout<<endl<<"yes, it is!"; 
+0

Вы можете использовать массив bool, но я думаю, что это самый простой способ для вас :) –

+0

_ «Вы можете использовать массив bool ...» _ достаточно простой переменной счетчика. –

+1

@ πάνταῥεῖ, который не будет работать, потому что счетчик может иметь значение 4, если все вставленные значения равны 1 .. Bool занимает меньше места, чем int. –

4

Использование std::is_permutation:

int choice[4]; 

for (int i=0;i<4;i++) 
{ 
    cin >> choice[i]; 
} 

std::cout << std::is_permutation(std::begin(choice), std::end(choice), std::vector<int>{1, 3, 4, 6}.begin()) << std::endl; 
+0

Не проблема ли здесь со временем жизни временного 'std :: vector', используемого как 3-й аргумент? – Snps

+0

@Snps Nope, так же, как 'i' in' for (int i = 0; i

+0

Но единственное, что передано в область функций 'std :: is_permutation', является копией итератора. Временное создается на сайте вызова, правильно? – Snps

0

Вы можете использовать что-то вроде:

std::vector<int> choice(4); 
for (int i = 0; i < 4; ++i) 
{ 
    std::cin >> choice[i]; 
} 

std::sort(std::begin(choice), std::end(choice)); 
if (choice == std::vector<int>{1, 3, 4, 6}) { // 1, 3, 4, 6 should be sorted. 
    // equal 
} 

Live example.

+0

Извините, что я являюсь абсолютным новичком в использовании векторов. Я запустил ваш код. Кажется, у меня много ошибок в моем коде. #include #include #include #include #include #include использования патезраса; int main() { std :: vector выбор (4); для (int i = 0; i <4; ++ i) { std :: cin >> choice [i]; } std :: sort (std :: begin (выбор), std :: end (выбор)); if (choice == std :: vector {1, 3, 4, 6}) {// 1, 3, 4, 6 следует сортировать. // равно } } –

+0

Вот вывод ... ошибка C2039: 'вроде': не является членом 'Std' ошибка C3861: 'вроде': идентификатор не найден ошибка C2143: синтаксическая ошибка: отсутствует ')' перед '{' ошибка C2275: 'станд :: вектор <_Ty>': незаконное использование такого типа, как выражение 1> с 1> [ 1> _Ty = INT 1>] ошибка C2143: синтаксическая ошибка: отсутствует ';' перед '}' ошибка C2059: синтаксическая ошибка: ')' –

+0

[Живой пример] (https://ideone.com/V6q8PV) работает. Вы должны включить '' и скомпилировать с C++ 11 (' -std = C++ 11' для gcc/clang). – Jarod42

Смежные вопросы