面试题 16.15. 珠玑妙算 - 力扣(LeetCode)
int* masterMind(char* solution, char* guess, int* returnSize) //定义一个函数masterMind,它接受三个参数:solution(正确答案),guess(玩家的猜测)和returnSize(用于返回结果数组的大小的指针){ int i=0,j=0; int realguess=0,virtualgess=0; do{ if(solution[i]==guess[i]) realguess++,solution[i]='0',guess[i]='1'; i++; }while(i<4);//do-while循环,用于检查solution和guess中的每一个字符是否相同。如果相同,则realguess增加1,并将这两个字符分别设置为'0'和'1'以标记它们已经被匹配过。 i=0;//重置i为0,为下一个循环做准备 do{//开始另一个do-while循环,用于检查guess中的字符是否在solution中出现,但不在相同的位置 do{//内部do-while循环开始,用于查找guess[i]在solution中的位置 if(guess[i]==solution[j]){ virtualgess++; solution[j] = '0'; break; }//如果guess中的字符在solution中的某个位置找到,则virtualgess增加1,并将该位置的solution字符设置为'0'以标记它已经被匹配过,然后跳出内部循环 j++;//如果guess[i]不在solution[j]的位置,增加j的值以检查下一个位置 }while(j<4); j=0; i++; }while(i<4); j=0; int *ret; ret = malloc(sizeof(int)*2); ret[0] = realguess; ret[1] = virtualgess; *returnSize = 2; return ret; }
#include <stdio.h> // 函数用于找到两个数,使它们的和等于目标值target // numbers是整型数组,numbersSize是数组的大小,target是目标值 // 函数返回包含两个数下标的数组,下标从1开始计数 // 如果找不到满足条件的两个数,函数返回NULL int* two_sum_without_hash(int* numbers, int numbersSize, int target, int* returnSize) { if (numbers == NULL || numbersSize < 2 || returnSize == NULL) { *returnSize = 0; return NULL; } for (int i = 0; i < numbersSize; i++) { for (int j = i + 1; j < numbersSize; j++) //这两行开始了一个双重循环,用于遍历数组中的每对元素。外层循环变量i从0开始,内层循环变量j从i + 1开始,这样可以确保我们不会重复检查相同的数对{ if (numbers[i] + numbers[j] == target) { // 找到满足条件的两个数,返回它们的下标 int* result = (int*)malloc(2 * sizeof(int)); //如果找到了满足条件的数对,我们分配内存来存储它们的下标 if (result == NULL) { *returnSize = 0; //这段代码检查输入参数的有效性。如果numbers数组为空、数组大小小于2,或者returnSize指针为空,函数会立即返回NULL,并将*returnSize设置为0 return NULL; } result[0] = i + 1; // 下标从1开始计数 result[1] = j + 1; *returnSize = 2; return result; //如果内存分配成功,我们将数对的下标存储在result数组中,并将*returnSize设置为2,然后返回result数组 } } } // 没有找到满足条件的两个数 *returnSize = 0; return NULL; } int main() { int numbers[] = {2, 7, 11, 15}; int target = 9; int returnSize; int* result = two_sum_without_hash(numbers, sizeof(numbers) / sizeof(numbers[0]), target, &returnSize); if (result != NULL) { printf("Indices of the two numbers that sum up to %d are: %d and %d\n", target, result[0], result[1]); free(result); // 释放分配的内存 } else { printf("No two numbers found that sum up to %d\n", target); } return 0; }