Гост написа:Колко шестцифрени числа с различни цифри се образуват с цифрите 0,1,2,3,5,8и9?
Jack написа:...
Има общо $6 \times 6 \times 5 \times 4 \times 3 \times 2 = 4320$
Симулация:
За да съм сигурен в отговора ще направя симулация с програма на $c++$:
Който го интересува кода на програмата:
...
peyo написа:Jack написа:...
Има общо $6 \times 6 \times 5 \times 4 \times 3 \times 2 = 4320$
Симулация:
За да съм сигурен в отговора ще направя симулация с програма на $c++$:
Който го интересува кода на програмата:
...
Аз се интересувам, защото и аз когато изчисля нещо свързано с комбинации или вероятности, обикновено не вярвам на отговора докато не направя симулация.
Но С++ обикновено е много неудобен език за симулации. Аз лично препоръчвам Python за подобни цели:
In [160]: from itertools import permutations
In [164]: sum([1 for p in permutations([0,1,2,3,5,8,9], 6) if p[0] !=0])
Out[164]: 4320
#include <bits/stdc++.h>
using namespace std;
int main()
{
int arr[7] = {0, 1, 2, 3, 5, 8, 9};
int ans = 0;
do
{
if (arr[0] != 0)
{
ans++;
}
}
while (next_permutation(arr, arr + 7));
cout << ans << endl;
return 0;
}
Jack написа:Аз го направих на С++, защото знам само него като език как да имплементирам нещо.
Като видях това permutations, ми хрумна идея с готовата функция next_permutation в $c++$ да симулирам числата вместо да проверявам всички шестцифрени числа:
- Код: Избери целия код
#include <bits/stdc++.h>
using namespace std;
int main()
{
int arr[7] = {0, 1, 2, 3, 5, 8, 9};
int ans = 0;
do
{
if (arr[0] != 0)
{
ans++;
}
}
while (next_permutation(arr, arr + 7));
cout << ans << endl;
return 0;
}
peyo написа:Jack написа:Аз го направих на С++, защото знам само него като език как да имплементирам нещо.
Като видях това permutations, ми хрумна идея с готовата функция next_permutation в $c++$ да симулирам числата вместо да проверявам всички шестцифрени числа:
- Код: Избери целия код
#include <bits/stdc++.h>
using namespace std;
int main()
{
int arr[7] = {0, 1, 2, 3, 5, 8, 9};
int ans = 0;
do
{
if (arr[0] != 0)
{
ans++;
}
}
while (next_permutation(arr, arr + 7));
cout << ans << endl;
return 0;
}
Това вече е доста по-добре, но пак не съвсем. С++ next_permutation генерира N! с дължина N, докато в нашия случай ние имаме 7 различни цифри, но искаме да генерираме всички редици с дължина само 6. По случайност в нашия случай резултат за 6 и 7 съвпада и без да искаш получи верния отговор:
In [165]: sum([1 for p in permutations([0,1,2,3,5,8,9], 6) if p[0] !=0])
Out[165]: 4320
In [166]: sum([1 for p in permutations([0,1,2,3,5,8,9], 7) if p[0] !=0])
Out[166]: 4320
Но ако търсихме 5:
In [167]: sum([1 for p in permutations([0,1,2,3,5,8,9], 5) if p[0] !=0])
Out[167]: 2160
Изглежда няма хубава фунция за пермутации за С++ която приема параметър лимит, но изглежда има workaround дискутиран в stackoverflow.
Щом имаш интерес към програмирането препоръчвам ученето на повече езици. Всеки език е подходящ за различни цели и много често ученето на нов език помага за по-доброто разбиране на други езици, както кода на Python ти даде идея за C++.
Регистрирани потребители: Google [Bot]