fork download
  1. #include <stdio.h>
  2. // prototype
  3. int lcm(int , int);
  4. int ncr(int , int );
  5.  
  6. int lcm(int a, int b)
  7. {
  8. while (a % b) {
  9. int t = a % b;
  10. a = b;
  11. b = t;
  12. }
  13. return b;
  14. }
  15.  
  16. int ncr(int n, int r)
  17. {
  18. int a = 1, b = 1;
  19. while (r) {
  20. a *= n--;
  21. b *= r--;
  22. int t = lcm(a , b);
  23. a /= t;
  24. b /= t;
  25. }
  26. return a / b;
  27. }
  28.  
  29. int calc1(int *a, int n, int r)
  30. {
  31. int sum = 0, j = 1;
  32. for (int i = 0; i < r; ++i) {
  33. for (; j < *a; ++j)sum += ncr(43 - j , r - 1 - i);
  34. j = *a++ + 1;
  35. }
  36. sum += ncr(0, 0);
  37. printf("%d\n", sum);
  38. return sum;
  39. }
  40.  
  41. int calc2(int a, int n, int r)
  42. {
  43. printf("\n%d\t", a);
  44. int j = 1;
  45. while (r > 0) {
  46. int t = ncr(n - 1, r - 1);
  47. if (t < a) {
  48. a -= t;
  49. ++j;
  50. --n;
  51. } else {
  52. printf("%d,", j);
  53. --n;
  54. ++j;
  55. --r;
  56. }
  57. }
  58. return 0;
  59. }
  60.  
  61. int main(int argc, char const *argv[])
  62. {
  63. int n, r, a[100], i;
  64. FILE *fpi;
  65. sscanf(argv[1], "%d,%d", &n, &r);
  66. if (argv[2][0] == 'r') {
  67. fpi = fopen(argv[3], "r");
  68. i = 0;
  69. while (fscanf(fpi, "%d,", a + i) != EOF) {
  70. if (++i == r) {
  71. calc1(a, n, r);
  72. i = 0;
  73. }
  74. }
  75. } else {
  76. fpi = fopen(argv[3], "r");
  77. while (fscanf(fpi, "%d", a) != EOF) {
  78. calc2(*a, n, r);
  79. }
  80. }
  81. return 0;
  82. }
  83.  
Runtime error #stdin #stdout 0s 2244KB
stdin
Standard input is empty
stdout
Standard output is empty