Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <cstdlib>
- #include <iostream>
- #include <algorithm>
- using namespace std;
- int m, n, s, k,l;
- bool *coins; // true - avers, false - revers
- bool *initCoins;
- void CreateCoins()
- {
- coins = new bool[m+n];
- initCoins = new bool[m+n];
- }
- void DeleteCoins()
- {
- delete coins;
- delete initCoins;
- }
- int TestPrint(bool print)
- {
- int avers = 0;
- for( int i = 0; i < m+n; avers+=coins[i]?1:0,i++)
- {
- if(print)
- cout << coins[i]<<" ";
- }
- if(print)
- cout << " avers: " << avers << endl;
- return avers;
- }
- void FillCoins()
- {
- for( int i = 0; i < m; i++)
- initCoins[i] = true;
- for( int i = m; i < m+n; i++)
- initCoins[i] = false;
- }
- bool turnCoins()
- {
- if(coins[0] == false )
- return false;
- for( int i=1,j; i<=k; i++ )
- {
- j=(s*i)%(m+n);
- coins[j]=coins[j]?false:true;
- }
- return true;
- }
- int main ()
- {
- bool result = true;
- cout<<"M= ";
- cin>>m;
- cout<<"N= ";
- cin>>n;
- cout<<"S= ";
- cin>>s;
- cout<<"K= ";
- cin>>k;
- cout<<"L= ";
- cin>>l;
- cout<<endl<<"true - avers, false - revers"<<endl<<endl;
- CreateCoins();
- FillCoins();
- sort (initCoins,initCoins+m+n);
- do
- {
- copy(initCoins,initCoins+n+m,coins);
- if( turnCoins() == false )
- continue;
- if( l==TestPrint(true) )
- {
- copy(initCoins,initCoins+n+m,coins);
- cout << endl;
- break;
- }
- }
- while ( result = next_permutation(initCoins,initCoins+m+n) );
- if(result)
- {
- cout<<"Start positions: ";
- TestPrint(true);
- turnCoins();
- cout<<"Final positions: " ;
- TestPrint(true);
- cout<< endl;
- }
- else cout << "there is no decision" << endl;
- DeleteCoins();
- system("pause");
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement