fork download
  1. #include <stdio.h>
  2.  
  3. int findDuplicate(int array[], int length) {
  4. int i = 0;
  5. int diff = 0;
  6. long long diffsq = 0;
  7.  
  8. for (; i < length; ++i) {
  9. diff += i - array[i];
  10. diffsq += ((long long)i)*i - ((long long)array[i])*array[i];
  11. }
  12.  
  13. return (int)((diffsq / diff - diff) / 2);
  14. }
  15.  
  16. int findAndDisplayResult (int array[], int length) {
  17. int dup = findDuplicate(array, length);
  18. printf("dup = %d (0x%x)\n", dup, dup);
  19. printf("array: ");
  20. for (int i = 0; i < length; ++i) {
  21. printf("%d ", array[i]);
  22. }
  23. printf("\n");
  24. }
  25.  
  26. int main(void) {
  27. int array[] = {0, 4, 2, 3, 10, 2, 9, 5, 8, 1, 6};
  28. const int length = sizeof(array)/sizeof(int);
  29. findAndDisplayResult(array, length);
  30.  
  31.  
  32. int array2[] = {0, 4, 7, 3, 2, 4, 5, 8, 1, 6};
  33. findAndDisplayResult(array2, sizeof(array2)/sizeof(int));
  34.  
  35. int array3[] = {0, 3, 0, 1};
  36. findAndDisplayResult(array3, sizeof(array3)/sizeof(int));
  37.  
  38. int array4[] = {2, 1, 1};
  39. findAndDisplayResult(array4, sizeof(array4)/sizeof(int));
  40.  
  41. int array5[] = {7, 4, 7, 3, 2, 5, 1, 6};
  42. findAndDisplayResult(array5, sizeof(array5)/sizeof(int));
  43.  
  44. int array6[] = {0, 4, 3, 2, 5, 1, 3};
  45. findAndDisplayResult(array6, sizeof(array6)/sizeof(int));
  46.  
  47. return 0;
  48. }
  49.  
Success #stdin #stdout 0s 4252KB
stdin
Standard input is empty
stdout
dup = 2 (0x2)
array: 0 4 2 3 10 2 9 5 8 1 6 
dup = 4 (0x4)
array: 0 4 7 3 2 4 5 8 1 6 
dup = 0 (0x0)
array: 0 3 0 1 
dup = 1 (0x1)
array: 2 1 1 
dup = 7 (0x7)
array: 7 4 7 3 2 5 1 6 
dup = 3 (0x3)
array: 0 4 3 2 5 1 3