fork(6) download
  1. #include <iostream>
  2.  
  3. using namespace std;
  4.  
  5. int searchOverHangs(float * inArr, float overHang, int lowerBound, int upperBound)
  6. {
  7. int position = (lowerBound + upperBound) / 2;
  8. float curVal = inArr[position];
  9. float nextVal = inArr[position + 1];
  10. if (overHang >= curVal && overHang < nextVal)
  11. {
  12. return position + 1;
  13. }
  14. else if (overHang < curVal)
  15. {
  16. upperBound -= (upperBound - lowerBound) / 2;
  17. return searchOverHangs(inArr, overHang, lowerBound, upperBound);
  18. }
  19. else
  20. {
  21. lowerBound += (upperBound - lowerBound) / 2;
  22. return searchOverHangs(inArr, overHang, lowerBound, upperBound);
  23. }
  24. }
  25.  
  26. int main()
  27. {
  28. float overHangs [277];
  29. float overHang = 0;
  30. float denominator = 2;
  31. overHangs[0] = 0;
  32. for (float i = 1; i < 277; i++)
  33. {
  34. overHang += (1 / (i + 1));
  35. overHangs[int(i)] = overHang;
  36. }
  37. float input;
  38. while (true)
  39. {
  40. scanf("%f", &input);
  41. if (input == 0.00)
  42. {
  43. break;
  44. }
  45. int answer = searchOverHangs(overHangs, input, 0, 276);
  46. printf("%d card(s)\r\n", answer);
  47. }
  48. return 0;
  49. }
Success #stdin #stdout 0.02s 2728KB
stdin
1.00
3.71
0.04
5.19
0.00
stdout
3 card(s)
61 card(s)
1 card(s)
273 card(s)