fork(1) download
  1. #include <iostream>
  2. #include <vector>
  3. #include <math.h>
  4. int CalculateChars(std::string tag)
  5. {
  6. int Count=0;
  7. for(unsigned int i=0; i<tag.length(); ++i)
  8. if(tag[i]!=' ')Count++;
  9. return Count;
  10. }
  11. void FillTab(int tab[],const int Size)
  12. {
  13. for(int i=0; i<Size; ++i)tab[i]=0;
  14. }
  15. bool isNotWas(std::vector<char>a,char b)
  16. {
  17. for(unsigned int i=0; i<a.size(); ++i)
  18. if(a[i]==b)return false;
  19. return true;
  20. }
  21. void CalculateFrequencyChars(std::string tag,int tab[])
  22. {
  23. std::vector<char>itWas;
  24. int Count=0;
  25. for(unsigned int j=0; j<tag.length(); ++j)
  26. {
  27. if(isNotWas(itWas,tag[j]))
  28. {
  29. for(unsigned int i=0; i<tag.length(); ++i)
  30. {
  31. if(tag[j]==tag[i])Count++;
  32. }
  33. itWas.push_back(tag[j]);
  34. tab[(int)tag[j]%65]=Count;
  35. Count=0;
  36. }
  37. }
  38. }
  39. void fillPercent(int sumOfChar,int all,int percent[],int i)
  40. {
  41. percent[i]=round(sumOfChar*100/all);
  42. }
  43. int SearchMax(int percent[],const int amountChars)
  44. {
  45. int Max=percent[0];
  46. int ind=0;
  47. for(int i=1;i<amountChars;++i)
  48. if(Max<percent[i]){Max=percent[i];ind=i;}
  49. return ind;
  50. }
  51. void ChangePercent(int percent[],int Max,int tab[],const int amountChars)
  52. {
  53. for(int i=0;i<amountChars;++i)
  54. {
  55. if(tab[i]>0 && percent[i]==0)
  56. percent[i]=1;
  57. Max=SearchMax(percent,amountChars);
  58. }
  59. int sum=0;
  60. do
  61. {
  62. for(int i=0;i<amountChars;++i)
  63. sum+=percent[i];
  64. if(sum>100)percent[Max]--;
  65. else if(sum<100)percent[Max]++;
  66. }while(sum==0);
  67. }
  68. std::string writeStars(int percent)
  69. {
  70. std::string stars="";
  71. for(int i=0;i<percent;++i)
  72. stars+='*';
  73. return stars;
  74. }
  75. void WriteChars(int tab[],int allChars,const int amountChars)
  76. {
  77. int percent[amountChars];
  78. for(int i=0;i<amountChars;++i)
  79. fillPercent(tab[i],allChars,percent,i);
  80.  
  81. int Max=SearchMax(percent,amountChars);
  82. ChangePercent(percent,Max,tab,amountChars);
  83.  
  84. for(int i=0,j=65;j<=90;++i,++j)
  85. std::cout<<(char)j<<' '<<percent[i]<<' '<<writeStars(percent[i])<<std::endl;
  86. }
  87. int main()
  88. {
  89. const int amountChars=26;
  90. std::string tag;
  91. std::getline(std::cin,tag);
  92. int sumOfChars=CalculateChars(tag);
  93. int tab[amountChars];
  94. FillTab(tab,amountChars);
  95. CalculateFrequencyChars(tag,tab);
  96. WriteChars(tab,sumOfChars,amountChars);
  97. return 0;
  98. }
  99.  
Success #stdin #stdout 0s 16056KB
stdin
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABBBBCCCCDDDDEEEEFFFFGGGGHHHHIIIIJJJJKKKKLLLLMMMMNNNNOOOOPPPPQQQQRRRRSSSSTTTTUUUUVVVVWWWWXXXXYYYYZZZZ
stdout
A 89 *****************************************************************************************
B 1 *
C 1 *
D 1 *
E 1 *
F 1 *
G 1 *
H 1 *
I 1 *
J 1 *
K 1 *
L 1 *
M 1 *
N 1 *
O 1 *
P 1 *
Q 1 *
R 1 *
S 1 *
T 1 *
U 1 *
V 1 *
W 1 *
X 1 *
Y 1 *
Z 1 *