Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- /**
- 16. Adjuk össze az összes olyan ötjegyû számot, amely egymástól külön-
- bözô, csak páratlan számjegyekbôl épül fel.*/
- using namespace std;
- int v[50], van[50]={0},ossz=0;
- int szam()
- {
- int sz=0;
- for(int i=1;i<=5;i++)
- sz=sz*10+v[i];
- }
- void back(int k)
- {
- for(int i=1;i<=9;i=i+2)
- if(van[i]==0)
- {
- v[k]=i;
- van[i]=1;
- if(k==5){ ossz=ossz+szam();
- cout<<szam()<< " ";}
- else back(k+1);
- van[i]=0;
- }
- }
- int main()
- {
- back(1);
- cout<<ossz;
- return 0;
- }
- +++++++++++++++++++++#include <iostream>
- /**
- 11. Adott egy A, n elemû és egy B m elemû halmaz. Irjuk ki az összes
- lehetséges f:A->B injektív függvényt.
- Pl: ha A={1,2} és B={3,4,5}, akkor:
- 1. f(1)=3, f(2)=4
- 2. f(1)=3, f(2)=5
- 3. f(1)=4, f(2)=3
- 4. f(1)=4, f(2)=5
- 5. f(1)=5, f(2)=3
- 6. f(1)=5, f(2)=4*/
- using namespace std;
- int a[50],b[50],n,m,v[50];
- void kiir()
- {
- for(int i=1;i<=n;i++){
- cout<<a[i]<<" -> "<<b[v[i]];
- cout<<endl;}
- }
- int helyes(int i, int k)
- {
- for(int j=1;j<k;j++)
- if(i==v[j]) return 0;
- return 1;
- }
- void back(int k)
- {
- for(int i=1;i<=m;i++)
- {
- if(helyes(i,k))
- {
- v[k]=i;
- if(k==n) kiir();
- else back(k+1);
- }
- }
- }
- int main()
- {
- cin>>n>>m;
- for(int i=1;i<=n;i++)
- cin>>a[i];
- for(int i=1;i<=m;i++)
- cin>>b[i];
- back(1);
- return 0;
- }
- ++++++++++++++++++++++++++++++
- #include <iostream>
- ///zaszlos, sarga mellett nem lehet feher
- ///n szinnel
- using namespace std;
- int v[50],n,van[50]={0};
- string a[50];
- int helyes(int i,int k)
- {
- if(a[i]=="sarga" && a[v[k-1]]=="feher" || a[v[k-1]]=="sarga" && a[i]=="feher")
- return 0;
- return 1;
- }
- void kiir()
- {
- for(int i=1;i<=3;i++)
- cout<<a[v[i]]<<" ";
- cout<<endl;
- }
- void back(int k)
- {
- for(int i=1;i<=n;i++)
- {
- if(van[i]==0 && helyes(i,k))
- {
- v[k]=i;
- van[i]=1;
- if(k==3) kiir();
- else back(k+1);
- van[i]=0;
- }
- }
- }
- int main()
- {
- cout<<"N ";cin>>n;
- for(int i=1;i<=n;i++)
- cin>>a[i];
- back(1);
- return 0;
- }
- +++++++++++++++++++++++++++++++++++++++
- #include <iostream>
- /**
- A Backtracking módszert alkalmazva képezzük az összes olyan 3 számjegyű számot, amelyek nem tartalmaznak azonos számjegyeket és bármely két egymás melletti számjegyük különböző paritású.
- Az így képzett első hat szám rendre: 103, 105, 107, 109, 123, 125.
- Melyik a kilencedik szám? (6p.)
- */
- using namespace std;
- int v[50], van[20]={0};
- void kiir()
- {
- for(int i=1;i<=3;i++)
- cout<<v[i];
- cout<<" ";
- }
- int helyes(int i,int k)
- {
- if(k==1 && i==0) return 0;
- if(i%2==v[k-1]%2) return 0;
- if(van[i]==1) return 0;
- return 1;
- }
- void back(int k)
- {
- for(int i=0;i<=9;i++)
- if(helyes(i,k))
- {
- v[k]=i;
- van[i]=1;
- if(k==3) kiir();
- back(k+1);
- van[i]=0;
- }
- }
- int main()
- {
- back(1);
- return 0;
- }
- +++++++++++++++++++++++++++
- #include <iostream>
- /**
- 9. Irjuk ki az összes n számjegybôl álló számot, amelyben a számjegyek
- összege egy s természetes szám.
- Pl: ha n=4 és s=5, akkor a számok 1004, 1013, 1022, ...*/
- using namespace std;
- int v[30],n,s,ossz=0;
- int helyes(int i, int k)
- {
- if(k==1 && i==0) return 0;
- if(ossz+i>s) return 0;
- return 1;
- }
- int megoldas(int k)
- {
- if(ossz==s && k==n) return 1;
- return 0;
- }
- void kiir()
- {
- for(int i=1;i<=n;i++)
- cout<<v[i];
- cout<<" "<<endl;
- }
- void back(int k)
- {
- for(int i=0;i<=s;i++)
- if(helyes(i,k))
- {
- v[k]=i;
- ossz=ossz+i;
- if(megoldas(k)) kiir();
- else if (k<n) back(k+1);
- ossz=ossz-i;
- }
- }
- int main()
- {
- cout<<"N ";cin>>n;
- cout<<"S ";cin>>s;
- back(1);
- return 0;
- }
- ++++++++++++++++++++++
Add Comment
Please, Sign In to add comment