change_weight.c 759 B

1234567891011121314151617181920212223242526272829303132
  1. #define _CRT_SECURE_NO_WARNINGS
  2. #include <stdlib.h>
  3. #include <stdio.h>
  4. #include <string.h>
  5. #include <math.h>
  6. #include "header.h"
  7. double* changes(int n,int amount) {
  8. double* ans = malloc(sizeof(double) * amount);
  9. if (amount == 3) {
  10. ans[0] = 0;
  11. ans[1] = (double)4 / n;
  12. ans[2] = (double)(n - 1) / n;
  13. }
  14. else {
  15. for (int i = 0;i < amount;i++) {
  16. ans[i] = (double)(n-(i*(n-1)/(amount-1))-1) / (n);
  17. }
  18. }
  19. return ans;
  20. }
  21. double* change_p(int n, int d_change, int pos_change,int amount) {
  22. double* p = malloc(sizeof(double) * n);
  23. double* cs = changes(n,amount);
  24. p[d_change] = cs[pos_change];
  25. for (int i = 0;i < n;i++) {
  26. if (i != d_change) {
  27. p[i] = (double)(1 - p[d_change]) / (n - 1);
  28. }
  29. }
  30. free(cs);
  31. return p;
  32. }