Last active
June 19, 2016 01:15
-
-
Save CraigRodrigues/53fb3ba1d02b4ef0d666d42a6e55babb to your computer and use it in GitHub Desktop.
[2016-06-13] Challenge #271 [Easy] Critical Hit
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| #include <stdio.h> | |
| #include <cs50.h> | |
| #include <math.h> | |
| /* [2016-06-13] Challenge #271 [Easy] Critical Hit | |
| * http://bit.ly/1sLH0bn | |
| * | |
| * Critical hits work a bit differently in this RPG. If you roll the maximum value on a die, you | |
| * get to roll the die again and add both dice rolls to get your final score. Critical hits can | |
| * stack indefinitely -- a second max value means you get a third roll, and so on. With enough | |
| * luck, any number of points is possible. | |
| * | |
| */ | |
| double p = 0; | |
| // probability of a favorable outcome | |
| double probability(double d, double h) | |
| { | |
| if (d < h) | |
| { | |
| return ((1/d) * probability(d,(h-d))); // recursive case. | |
| } | |
| if (d >= h) | |
| { | |
| return ((d-h)+1)/d; // base case of a favorable outcome in the number of sides is >= hp left | |
| } | |
| return 0; | |
| } | |
| int main(void) { | |
| // Disable stdout buffering | |
| setvbuf(stdout, NULL, _IONBF, 0); | |
| // Put the die numbers and hp numbers into arrays | |
| int arrd[] = {4,4,4,4,1,100,8}; | |
| int arrh[] = {1,4,5,6,10,200,20}; | |
| // Need to loop through arrays to be able to print out the outputs | |
| for (int i = 0; i < 7; i++) | |
| { | |
| // d and h just look better to me than using the arrd and arrh | |
| double d = arrd[i]; | |
| double h = arrh[i]; | |
| p = probability(d,h); | |
| printf("d = %i, h = %i, output = %.9f\n", arrd[i], arrh[i], p); //print to 9 decimal places | |
| } | |
| } |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| d = 4, h = 1, output = 1.000000000 | |
| d = 4, h = 4, output = 0.250000000 | |
| d = 4, h = 5, output = 0.250000000 | |
| d = 4, h = 6, output = 0.187500000 | |
| d = 1, h = 10, output = 1.000000000 | |
| d = 100, h = 200, output = 0.000100000 | |
| d = 8, h = 20, output = 0.009765625 |
Author
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
My solution to this coding problem on reddit: https://www.reddit.com/r/dailyprogrammer/comments/4nvrnx/20160613_challenge_271_easy_critical_hit/
I am using CS50's library as that is the only programming class I'm taking at the moment and am only on week 4. I am sure there is a way to simplify the probability formula as well.
Biggest hurdle was thinking about what the recursive case and base case would be. The twist is that there is always a chance if you roll the largest number on the die so (1/d) * (the next probability) and so on and so forth.
I am not so good with understanding how to use the data types so I chose double for everything since a lot of division was involved. Also I don't know a good way to format the output. I don't know how to put it into a nice grid or anything like that.
Also I should be dealing with memory allocation and clearing, but I only just learned how in CS50 and haven't implemented it over there yet.