Advertisement
Guest User

Untitled

a guest
Nov 22nd, 2017
67
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.38 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4.  
  5. int int_cmp(const void* p1, const void* p2);
  6. int checkValidity(int* sol, int pos);
  7. int readFile(int nums[]);
  8. int powerset(int pos, int *val, int *sol, int k, int start, int max);
  9.  
  10. int main()
  11. {
  12. FILE* fp1 = fopen("output.txt", "w");
  13. int nums[1000], sol[1000];
  14. int n, max=1, i;
  15.  
  16. n = readFile(nums);
  17. qsort(nums, n, sizeof(int), int_cmp);
  18.  
  19. max = powerset(0, nums, sol, n, 0, max);
  20. fprintf(fp1,"%d", max);
  21. }
  22.  
  23.  
  24. int readFile(int nums[]){
  25.  
  26. FILE* fp = fopen("input.txt", "r");
  27. int n, i;
  28.  
  29. fscanf(fp, "%d", &n);
  30.  
  31.  
  32. for(i=0;i<n;i++)
  33. fscanf(fp, "%d", &nums[i]);
  34.  
  35. return n;
  36. }
  37.  
  38. int int_cmp(const void *a, const void *b)
  39. {
  40. const int *ia = (const int *)a;
  41. const int *ib = (const int *)b;
  42. return *ia - *ib;
  43. }
  44.  
  45. int powerset(int pos, int val[], int sol[], int k, int start, int max) {
  46.  
  47. int i;
  48.  
  49. if (start >= k)
  50. {
  51. if(pos>max && checkValidity(sol, pos))
  52. max=pos;
  53.  
  54. return max;
  55. }
  56.  
  57. for (i = start; i < k ; i++) {
  58. sol[pos] = val[i];
  59. max = powerset(pos+1, val, sol, k, i+1, max);
  60. }
  61. if(pos>max)
  62. max = powerset(pos, val, sol, k, k, max);
  63. return max;
  64. }
  65.  
  66. int checkValidity(int sol[], int pos){
  67.  
  68. int i;
  69.  
  70. for(i=0;i<(pos-1);i++)
  71. if(sol[i+1]%sol[i] != 0)
  72. return 0;
  73.  
  74. return 1;
  75. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement