#include <stdio.h>
int findDuplicate(int array[], int length) {
int i = 0;
int diff = 0;
long long diffsq = 0;
for (; i < length; ++i) {
diff += i - array[i];
diffsq += ((long long)i)*i - ((long long)array[i])*array[i];
}
return (int)((diffsq / diff - diff) / 2);
}
int findAndDisplayResult (int array[], int length) {
int dup = findDuplicate(array, length);
printf("dup = %d (0x%x)\n", dup
, dup
); for (int i = 0; i < length; ++i) {
}
}
int main(void) {
int array[] = {0, 4, 2, 3, 10, 2, 9, 5, 8, 1, 6};
const int length = sizeof(array)/sizeof(int);
findAndDisplayResult(array, length);
int array2[] = {0, 4, 7, 3, 2, 4, 5, 8, 1, 6};
findAndDisplayResult(array2, sizeof(array2)/sizeof(int));
int array3[] = {0, 3, 0, 1};
findAndDisplayResult(array3, sizeof(array3)/sizeof(int));
int array4[] = {2, 1, 1};
findAndDisplayResult(array4, sizeof(array4)/sizeof(int));
int array5[] = {7, 4, 7, 3, 2, 5, 1, 6};
findAndDisplayResult(array5, sizeof(array5)/sizeof(int));
int array6[] = {0, 4, 3, 2, 5, 1, 3};
findAndDisplayResult(array6, sizeof(array6)/sizeof(int));
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CgppbnQgZmluZER1cGxpY2F0ZShpbnQgYXJyYXlbXSwgaW50IGxlbmd0aCkgewoJaW50IGkgPSAwOwoJaW50IGRpZmYgPSAwOwoJbG9uZyBsb25nIGRpZmZzcSA9IDA7CgkKCWZvciAoOyBpIDwgbGVuZ3RoOyArK2kpIHsKCQlkaWZmICs9IGkgLSBhcnJheVtpXTsKCQlkaWZmc3EgKz0gKChsb25nIGxvbmcpaSkqaSAtICgobG9uZyBsb25nKWFycmF5W2ldKSphcnJheVtpXTsKCX0KCQoJcmV0dXJuIChpbnQpKChkaWZmc3EgLyBkaWZmIC0gZGlmZikgLyAyKTsKfQoKaW50IGZpbmRBbmREaXNwbGF5UmVzdWx0IChpbnQgYXJyYXlbXSwgaW50IGxlbmd0aCkgewoJaW50IGR1cCA9IGZpbmREdXBsaWNhdGUoYXJyYXksIGxlbmd0aCk7CglwcmludGYoImR1cCA9ICVkICgweCV4KVxuIiwgZHVwLCBkdXApOwoJcHJpbnRmKCJhcnJheTogIik7Cglmb3IgKGludCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7CgkJcHJpbnRmKCIlZCAiLCBhcnJheVtpXSk7Cgl9CglwcmludGYoIlxuIik7Cn0KCmludCBtYWluKHZvaWQpIHsKCWludCBhcnJheVtdID0gezAsIDQsIDIsIDMsIDEwLCAyLCA5LCA1LCA4LCAxLCA2fTsKCWNvbnN0IGludCBsZW5ndGggPSBzaXplb2YoYXJyYXkpL3NpemVvZihpbnQpOwoJZmluZEFuZERpc3BsYXlSZXN1bHQoYXJyYXksIGxlbmd0aCk7CgkKCQoJaW50IGFycmF5MltdID0gezAsIDQsIDcsIDMsIDIsIDQsIDUsIDgsIDEsIDZ9OwoJZmluZEFuZERpc3BsYXlSZXN1bHQoYXJyYXkyLCBzaXplb2YoYXJyYXkyKS9zaXplb2YoaW50KSk7CgkKCWludCBhcnJheTNbXSA9IHswLCAzLCAwLCAxfTsKCWZpbmRBbmREaXNwbGF5UmVzdWx0KGFycmF5Mywgc2l6ZW9mKGFycmF5Mykvc2l6ZW9mKGludCkpOwoJCglpbnQgYXJyYXk0W10gPSB7MiwgMSwgMX07CglmaW5kQW5kRGlzcGxheVJlc3VsdChhcnJheTQsIHNpemVvZihhcnJheTQpL3NpemVvZihpbnQpKTsKCQoJaW50IGFycmF5NVtdID0gezcsIDQsIDcsIDMsIDIsIDUsIDEsIDZ9OwoJZmluZEFuZERpc3BsYXlSZXN1bHQoYXJyYXk1LCBzaXplb2YoYXJyYXk1KS9zaXplb2YoaW50KSk7CgkKCWludCBhcnJheTZbXSA9IHswLCA0LCAzLCAyLCA1LCAxLCAzfTsKCWZpbmRBbmREaXNwbGF5UmVzdWx0KGFycmF5Niwgc2l6ZW9mKGFycmF5Nikvc2l6ZW9mKGludCkpOwoJCglyZXR1cm4gMDsKfQo=