Avem o multime de litere si simboluri de la tastatura : `~1!2@3#4$5%6^7&8*9(0)-_=+qQwWeErRtTyYuUiIoOpP[{]}\|aAsSdDfFgGhHjJkKlL;:'"zZxXcCvVbBnNmM,<.>/?
Sa se faca un program asa incat acesta sa afiseze totalitatea combinatilor posibile care se pot face cu acestea
AM NEVOIE URGENT
PS : trebuie folosita biblioteca <fstream>
JolieJulie:
In ce fel combinari...?
Răspunsuri la întrebare
Răspuns de
3
Dupa mult studiu am reusit cumva sa se poata genera toate posibilitatile.
Sper ca m-am supus cerintei, deoarece e cam vaga si asa am studiat pentru ce am gandit.
Nu mi se pare asa eficienta metoda, dar este ok. Scuze dar am facut-o in c#, o poti rescrie tu in C++ daca e nevoie, dar o sa dureze ceva generarea rezultatelor.
metoda e recursiva
pentru ceva simplu de gandit folositi for-uri pana va saturati. O seara placuta si sarbatori fericite in continuare. :D
Update1: Am mai diversificat programul in C#.
Spor la BruteForce password :)
using System;
namespace BackTracking
{
class Program
{
static string sir = "";
static int statusSolve = 0; // 0 = combinari; 1= aranjamente//
static void combinationUtil(int[] arr, int[] data, int start, int end, int index, int r)
{
// Current combination is ready to be printed, print it
if (index == r)
{
for (int j = 0; j < r; j++)
Console.Write(sir[data[j]] + " ");
Console.WriteLine();
return;
}
////pui i = start => combinari ----------- i <= end && end - i + 1 >= r - index
////pui i = 0 => aranjamente ----------- i <= end
if (statusSolve == 0) //Combinari
{
for (int i = start; i <= end && end - i + 1 >= r - index; i++)
{
data[index] = arr[i];
combinationUtil(arr, data, i + 1, end, index + 1, r);
}
}
else if (statusSolve == 1) //Aranjamente
{
for (int i = 0; i <= end; i++)
{
data[index] = arr[i];
combinationUtil(arr, data, i + 1, end, index + 1, r);
}
}
}
static void PrintCombination(int[] arr,int n, int r)
{
int[] data = new int[r];
combinationUtil(arr,data,0,n-1,0,r);
}
static void Main(string[] args)
{
//citire sir
Console.WriteLine("Introdu sirul:");
sir = Console.ReadLine();
//atribuire valor indexi sir caractere
int[] arr = new int[sir.Length];
for (int i = 0; i < sir.Length; i++)
{
arr[i] = i;
}
Console.WriteLine("Pentru combinari - introdu 1"); Console.WriteLine("Pentru aranjamanete - introdu 2");
int temp = int.Parse(Console.ReadLine());
switch (temp)
{
case 1:
statusSolve = 0;
break;
case 2:
statusSolve = 1;
break;
default:
break;
}
//Combinari/Aranjamente de n
int n = arr.Length;
//Luate cate r
if (statusSolve == 0)
Console.WriteLine("Combinari de {0} luate cate (trebuie sa fie mai mica ca {0})", n);
else
Console.WriteLine("Aranjamente de {0} luate cate (trebuie sa fie mai mica ca {0})", n);
int r = int.Parse(Console.ReadLine());
if (r >= 0 && r <=n)
Print(arr, n, r);
else
Console.WriteLine("Nu poate fi r > n");
}
}
}
Sper ca m-am supus cerintei, deoarece e cam vaga si asa am studiat pentru ce am gandit.
Nu mi se pare asa eficienta metoda, dar este ok. Scuze dar am facut-o in c#, o poti rescrie tu in C++ daca e nevoie, dar o sa dureze ceva generarea rezultatelor.
metoda e recursiva
pentru ceva simplu de gandit folositi for-uri pana va saturati. O seara placuta si sarbatori fericite in continuare. :D
Update1: Am mai diversificat programul in C#.
Spor la BruteForce password :)
using System;
namespace BackTracking
{
class Program
{
static string sir = "";
static int statusSolve = 0; // 0 = combinari; 1= aranjamente//
static void combinationUtil(int[] arr, int[] data, int start, int end, int index, int r)
{
// Current combination is ready to be printed, print it
if (index == r)
{
for (int j = 0; j < r; j++)
Console.Write(sir[data[j]] + " ");
Console.WriteLine();
return;
}
////pui i = start => combinari ----------- i <= end && end - i + 1 >= r - index
////pui i = 0 => aranjamente ----------- i <= end
if (statusSolve == 0) //Combinari
{
for (int i = start; i <= end && end - i + 1 >= r - index; i++)
{
data[index] = arr[i];
combinationUtil(arr, data, i + 1, end, index + 1, r);
}
}
else if (statusSolve == 1) //Aranjamente
{
for (int i = 0; i <= end; i++)
{
data[index] = arr[i];
combinationUtil(arr, data, i + 1, end, index + 1, r);
}
}
}
static void PrintCombination(int[] arr,int n, int r)
{
int[] data = new int[r];
combinationUtil(arr,data,0,n-1,0,r);
}
static void Main(string[] args)
{
//citire sir
Console.WriteLine("Introdu sirul:");
sir = Console.ReadLine();
//atribuire valor indexi sir caractere
int[] arr = new int[sir.Length];
for (int i = 0; i < sir.Length; i++)
{
arr[i] = i;
}
Console.WriteLine("Pentru combinari - introdu 1"); Console.WriteLine("Pentru aranjamanete - introdu 2");
int temp = int.Parse(Console.ReadLine());
switch (temp)
{
case 1:
statusSolve = 0;
break;
case 2:
statusSolve = 1;
break;
default:
break;
}
//Combinari/Aranjamente de n
int n = arr.Length;
//Luate cate r
if (statusSolve == 0)
Console.WriteLine("Combinari de {0} luate cate (trebuie sa fie mai mica ca {0})", n);
else
Console.WriteLine("Aranjamente de {0} luate cate (trebuie sa fie mai mica ca {0})", n);
int r = int.Parse(Console.ReadLine());
if (r >= 0 && r <=n)
Print(arr, n, r);
else
Console.WriteLine("Nu poate fi r > n");
}
}
}
Error CS0103 The name 'Print' does not exist in the current context ConsoleApp1 C:\Users\balin\source\repos\ConsoleApp1\ConsoleApp1\Program.cs 77 Active
Alte întrebări interesante
Informatică,
8 ani în urmă
Limba română,
8 ani în urmă
Limba română,
9 ani în urmă
Matematică,
9 ani în urmă
Limba română,
9 ani în urmă
Matematică,
9 ani în urmă
Engleza,
9 ani în urmă