fork download
  1. #include <iostream>
  2. #include <map>
  3. #include <vector>
  4. #include <cmath>
  5.  
  6. using namespace std;
  7.  
  8. int magic(map<char, int> &v, const string str) // arvutab s6na arvulise v22rtuse
  9. {
  10. int sum = 0, i = 0;
  11. for (auto it = str.rbegin(); it != str.rend(); ++it, ++i)
  12. {
  13. sum += pow(10.0, i) * v[*it];
  14. }
  15. return sum;
  16. }
  17.  
  18. bool unique(map<char, int> &v) // kontrollib kas k6ik numbrid on unikaalsed
  19. {
  20. for (auto it1 = v.begin(); it1 != v.end(); ++it1)
  21. {
  22. auto it2 = it1;
  23. ++it2;
  24. for (;it2 != v.end(); ++it2)
  25. {
  26. if (it1->second == it2->second)
  27. {
  28. return false;
  29. }
  30. }
  31. }
  32. return true;
  33. }
  34.  
  35. int main()
  36. {
  37. map<char, int> v;
  38. string str("KRONAFRANK");
  39. for (int i = 0; i < str.size(); i++) // lisab kasutatavad t2hed
  40. {
  41. v[str[i]] = 0;
  42. }
  43.  
  44. bool end = false;
  45. while (!end)
  46. {
  47. if ((3 * magic(v, "KRONA") == magic(v, "FRANK")) && unique(v)) // kontrollib lahendust
  48. {
  49. for (auto it = v.begin(); it != v.end(); ++it)
  50. {
  51. cout << it->first << ":" << it->second << "; ";
  52. }
  53. cout << endl;
  54. }
  55.  
  56. v.begin()->second++; // suurendab esimest numbrit
  57. for (auto it = v.begin(); it != v.end(); ++it)
  58. {
  59. if (it->second > 9) // carry
  60. {
  61. auto it2 = it;
  62. it2++;
  63. if (it2 != v.end())
  64. {
  65. it->second = 0;
  66. it2->second++;
  67. }
  68. else // l6petamine
  69. {
  70. end = true;
  71. }
  72. }
  73. else
  74. {
  75. break;
  76. }
  77. }
  78. }
  79. return 0;
  80. }
  81.  
Success #stdin #stdout 1.12s 2964KB
stdin
Standard input is empty
stdout
A:7; F:3; K:1; N:4; O:2; R:0;