Niedawno prosiłem o pomoc w rozwiązaniu zadania
Niech X będzie zbiorem permutacji zbioru {1, 2, 3... n}. Niech f będzie funkcją liniową n zmiennych taką, że f(a_1, a_2, ... a_n)=1*a_1+2*a_2+... +n*a_n. Niech b_i to liczba permutacji x należących do X takich, że f(x)=i (mod n). Przykładowo dla n=3 mamy 6 permutacji x_1,x_2...x_6 = X mianowicie:
1,2,3=x_1
1,3,2=x_2
2,1,3=x_3
2,3,1=x_4
3,1,2=x_5
3,2,1=x_6
no i f(x_1)=14=2(mod 3), f(x_2)=13=1(mod 3)....f(x_6)=8=2(mod 3) i finalnie b_1=3, b_2=3, b_3=0.
Proszę o pomoc w napisaniu programu który mi napisze po kolei b_1...b_n
mam pewien pomysł jak to zrobić:
Najpierw(przed main) napisze sobie funkcje ktora mi sumuje domnożone elementy tablicy (funkcja f tak jak wyżej) pozniej wchodze do programu wczytuje kolejne liczby od 1 do n w tablice i robie petle for ktora w jednym kroku stosuje funkcje f i komende next permutation i wyswietla wynik. niestety nie do konca wiem jak zrobic tą ostatnią pętlę for. Proszę o wskazówki, jak to zrobić lub wyjaśnienie co tak naprawde robi to next permutation, czy to w ogole dobry pomysl? początek programu mi się dobrze skompilował i działa.
#include <algorithm>
#include <string>
#include <iostream>
#include <stdio.h>
using namespace std;
int funkcja (int t[],int n)
{int wynik=0;
for(int i=0;i<n;i++)
wynik=wynik+(i+1)*t[i];
return wynik;
}
main(){
int k;
cin >> k;
int d[k];
for(int i=0;i<k;i++)
d[i]=i+1;
// tu chciałbym zrobić pętlę ktora stosuje next permutation i pozniej wyznacza odpowiednią wartość za pomocą mojej funkcji
//jak to zrobić...
/* sort(1,k);
next_permutation(1,k);*/
}