#include <stdio.h> #include <stdlib.h> int findFirst(int* nums, int length, int target) { if (nums == nullptr || length <= 0) return -1; int index = 0; while (index < length && nums[index] != target) { int delta = target - nums[index]; index += abs(delta); } if (index < length) return index; return -1; } /************************* test code *****************************/ bool isFirst(int* nums, int length, int target, int index) { for (int i = 0; i < index; ++i) { if (nums[i] == target) return false; } if (nums[index] == target) return true; return false; } void test(const char* testName, int* nums, int length, int target, bool isIn) { int result = findFirst(nums, length, target); if ((isIn && result >= 0 && isFirst(nums, length, target, result)) || (!isIn && result < 0)) { printf("%s passed. Result is %d. \n", testName, result); } else { printf("%s FAILED.\n", testName); } } void testGroup1() { int nums[] = { 4, 5, 6, 5, 6, 7, 8, 9, 10, 9 }; test("test1_1", nums, sizeof(nums) / sizeof(int), 0, false); test("test1_2", nums, sizeof(nums) / sizeof(int), 1, false); test("test1_3", nums, sizeof(nums) / sizeof(int), 2, false); test("test1_4", nums, sizeof(nums) / sizeof(int), 3, false); test("test1_5", nums, sizeof(nums) / sizeof(int), 4, true); test("test1_6", nums, sizeof(nums) / sizeof(int), 5, true); test("test1_7", nums, sizeof(nums) / sizeof(int), 6, true); test("test1_8", nums, sizeof(nums) / sizeof(int), 7, true); test("test1_9", nums, sizeof(nums) / sizeof(int), 8, true); test("test1_10", nums, sizeof(nums) / sizeof(int), 9, true); test("test1_11", nums, sizeof(nums) / sizeof(int), 10, true); test("test1_12", nums, sizeof(nums) / sizeof(int), 11, false); } void testGroup2() { int nums[] = { 8, 7, 6, 7, 6, 5, 4, 3, 2, 3, 4, 3 }; test("test2_1", nums, sizeof(nums) / sizeof(int), 0, false); test("test2_2", nums, sizeof(nums) / sizeof(int), 1, false); test("test2_3", nums, sizeof(nums) / sizeof(int), 2, true); test("test2_4", nums, sizeof(nums) / sizeof(int), 3, true); test("test2_5", nums, sizeof(nums) / sizeof(int), 4, true); test("test2_6", nums, sizeof(nums) / sizeof(int), 5, true); test("test2_7", nums, sizeof(nums) / sizeof(int), 6, true); test("test2_8", nums, sizeof(nums) / sizeof(int), 7, true); test("test2_9", nums, sizeof(nums) / sizeof(int), 8, true); test("test2_10", nums, sizeof(nums) / sizeof(int), 9, false); test("test2_11", nums, sizeof(nums) / sizeof(int), 10, false); test("test2_12", nums, sizeof(nums) / sizeof(int), 11, false); } void testGroup3() { int nums[] = { 6, 5, 4, 3, 4, 5, 6, 7, 8 }; test("test3_1", nums, sizeof(nums) / sizeof(int), 0, false); test("test3_2", nums, sizeof(nums) / sizeof(int), 1, false); test("test3_3", nums, sizeof(nums) / sizeof(int), 2, false); test("test3_4", nums, sizeof(nums) / sizeof(int), 3, true); test("test3_5", nums, sizeof(nums) / sizeof(int), 4, true); test("test3_6", nums, sizeof(nums) / sizeof(int), 5, true); test("test3_7", nums, sizeof(nums) / sizeof(int), 6, true); test("test3_8", nums, sizeof(nums) / sizeof(int), 7, true); test("test3_9", nums, sizeof(nums) / sizeof(int), 8, true); test("test3_10", nums, sizeof(nums) / sizeof(int), 9, false); test("test3_11", nums, sizeof(nums) / sizeof(int), 10, false); test("test3_12", nums, sizeof(nums) / sizeof(int), 11, false); } int main() { testGroup1(); testGroup2(); testGroup3(); }
Standard input is empty
test1_1 passed. Result is -1. test1_2 passed. Result is -1. test1_3 passed. Result is -1. test1_4 passed. Result is -1. test1_5 passed. Result is 0. test1_6 passed. Result is 1. test1_7 passed. Result is 2. test1_8 passed. Result is 5. test1_9 passed. Result is 6. test1_10 passed. Result is 7. test1_11 passed. Result is 8. test1_12 passed. Result is -1. test2_1 passed. Result is -1. test2_2 passed. Result is -1. test2_3 passed. Result is 8. test2_4 passed. Result is 7. test2_5 passed. Result is 6. test2_6 passed. Result is 5. test2_7 passed. Result is 2. test2_8 passed. Result is 1. test2_9 passed. Result is 0. test2_10 passed. Result is -1. test2_11 passed. Result is -1. test2_12 passed. Result is -1. test3_1 passed. Result is -1. test3_2 passed. Result is -1. test3_3 passed. Result is -1. test3_4 passed. Result is 3. test3_5 passed. Result is 2. test3_6 passed. Result is 1. test3_7 passed. Result is 0. test3_8 passed. Result is 7. test3_9 passed. Result is 8. test3_10 passed. Result is -1. test3_11 passed. Result is -1. test3_12 passed. Result is -1.
The brand new service which powers Ideone!
Widget for compiling and running the source code in a web browser!