每日一题(珠玑妙算,两数之和)

简介: 每日一题(珠玑妙算,两数之和)

面试题 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;
}

两数之和_牛客题霸_牛客网 (nowcoder.com)

#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;  
}
相关文章
|
3月前
|
存储
LeetCode热题 首题 两数之和
LeetCode热题 首题 两数之和
19 1
|
7月前
|
移动开发 Shell
蓝桥杯:2020 国赛 例题:天干地支
蓝桥杯:2020 国赛 例题:天干地支
43 0
|
1月前
|
存储
每日一题啦(● ̄(エ) ̄●)(尼克切斯定理,等差数列)
每日一题啦(● ̄(エ) ̄●)(尼克切斯定理,等差数列)
|
1月前
|
机器学习/深度学习 算法 索引
leetcode热题100.两数之和
leetcode热题100.两数之和
13 1
|
3月前
|
C++ 存储 Serverless
力扣C++|一题多解之数学题专场(2)
力扣C++|一题多解之数学题专场(2)
28 0
力扣C++|一题多解之数学题专场(2)
|
3月前
|
C++ 存储
力扣C++|一题多解之数学题专场(1)
力扣C++|一题多解之数学题专场(1)
23 0
力扣C++|一题多解之数学题专场(1)
|
9月前
《蓝桥杯每日一题》递推·AcWing 3777. 砖块
《蓝桥杯每日一题》递推·AcWing 3777. 砖块
50 0
|
9月前
|
机器学习/深度学习
《蓝桥杯每日一题》背包dp·AcWing3382. 整数拆分
《蓝桥杯每日一题》背包dp·AcWing3382. 整数拆分
46 0
|
10月前
|
算法 测试技术 Python
第十二届蓝桥杯《杨辉三角》-二分法
第十二届蓝桥杯《杨辉三角》-二分法
60 0
|
10月前
|
测试技术
题目2674:蓝桥杯2022年第十三届省赛真题-求阶乘
题目2674:蓝桥杯2022年第十三届省赛真题-求阶乘