C语言每日一练--Day(15)

这篇具有很好参考价值的文章主要介绍了C语言每日一练--Day(15)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

本专栏为c语言练习专栏,适合刚刚学完c语言的初学者。本专栏每天会不定时更新,通过每天练习,进一步对c语言的重难点知识进行更深入的学习。

今日练习题关键字:珠玑妙算 两数之和

C语言每日一练--Day(15),c语言天天练,c语言,C语言每日一练

💓博主csdn个人主页:小小unicorn
⏩专栏分类:C语言天天练
🚚代码仓库:小小unicorn的代码仓库🚚
🌹🌹🌹关注我带你学习编程知识

题目一:

题目描述:

题目来源:珠玑妙算:
珠玑妙算游戏(the game of master mind)的玩法如下。
计算机有4个槽,每个槽放一个球,颜色可能是红色(R)、黄色(Y)、绿色(G)或蓝色(B)。例如,计算机可能有RGGB 4种(槽1为红色,槽2、3为绿色,槽4为蓝色)。作为用户,你试图猜出颜色组合。打个比方,你可能会猜YRGB。要是猜对某个槽的颜色,则算一次“猜中”;要是只猜对颜色但槽位猜错了,则算一次“伪猜中”。注意,“猜中”不能算入“伪猜中”。

给定一种颜色组合solution和一个猜测guess,编写一个方法,返回猜中和伪猜中的次数answer,其中answer[0]为猜中的次数,answer[1]为伪猜中的次数。

C语言每日一练--Day(15),c语言天天练,c语言,C语言每日一练

解题思路:

先统计每种颜色出现的次数,再取guess跟solution的每种颜色出现次数的最少值之和就是猜中+伪猜中总数

代码实现:

/**
 * Note: The returned array must be malloced, assume caller calls free().
 */
#define MAX_NUM (2)
#define MAX_LENGTH (4)
#define FOUND 'F'
int min(int a, int b) 
{
    if (a < b) 
        return a;
    return b;
}
int* masterMind(char* solution, char* guess, int* returnSize) 
{
    int i = 0;
    int count = 0;
    int rs = 0;
    int ys = 0;
    int gs = 0;
    int bs = 0;
    int rg = 0;
    int yg = 0;
    int gg = 0;
    int bg = 0;
    int *answer = (int*)malloc(sizeof(int)*2);
    answer[0] = 0;
    answer[1] = 0;

    for (i=0; i < MAX_LENGTH; i++) 
    {
        if (i < MAX_LENGTH) 
        {
            if (guess[i] == solution[i]) 
            {
                answer[0]++;
            }
            
        }
    }
    for (i=0; i < MAX_LENGTH; i++) 
    {
            if (solution[i] == 'R')
                ++rs;
            else if (solution[i] == 'G')
                ++gs;
            else if (solution[i] == 'B')
                ++bs;
            else if (solution[i] == 'Y')
                ++ys;
            else
            solution[i] == FOUND;
    }
    for (i=0; i < MAX_LENGTH; i++) 
    {
            if (guess[i] == 'R')
                ++rg;
            else if (guess[i] == 'G')
                ++gg;
            else if (guess[i] == 'B')
                ++bg;
            else if (guess[i] == 'Y')
                ++yg;
            else
                guess[i] == FOUND;
    }
    count += min(rs, rg)+min(gs, gg)+min(bs, bg)+min(ys, yg);
    answer[1] = count - answer[0];
    *returnSize = MAX_NUM;
    return answer;
}

结果情况:

C语言每日一练--Day(15),c语言天天练,c语言,C语言每日一练
符合题目要求,问题得到解决。

题目二:

题目描述:

题目来源:两数之和
给出一个整型数组 numbers 和一个目标值 target,请在数组中找出两个加起来等于目标值的数的下标,返回的下标按升序排列。
注:返回的数组下标从1开始算起,保证target一定可以由数组里面2个数字相加得到)
C语言每日一练--Day(15),c语言天天练,c语言,C语言每日一练

解题思路:

先找第一个加数,因为第二个加数可能会是负数,且题中说了最小为-10,所以判断如果某个数减10之后还大于sum,那么必不可能是第一个加数,看下一个。

找到第一个加数之后,便从其后面开始找第二个,一轮遍历没找到,就把第一个加数换成下一个再重新找。

代码实现:

int* twoSum(int* numbers, int numbersLen, int target, int* returnSize ) 
{
    int* ret = (int*)malloc(sizeof(int) *2); //为数组申请2个整型大小的空间
    if (numbersLen == 0)   
         return NULL;
    *returnSize = 2; //控制返回数组中元素的个数为2
    int i, j;
    for (i = 0; i < numbersLen - 1; i++) 
    {
        if (numbers[i] - 10 > target) //可能会在后面被减掉10
            continue;//跳过本次for,检查下一个元素
        for (j = i + 1; j < numbersLen; j++) 
        {
            //从某个小于目标值的数的后一个数开始比较
            if (numbers[i] + numbers[j] == target) 
            {
                ret[0] = i + 1; //所求第一个加数的下标值
                ret[1] = j + 1; //所求第二个加数的下标值
                return ret;   //返回数组首地址
            }
        }
    }
    return ret;
}

结果情况:

C语言每日一练--Day(15),c语言天天练,c语言,C语言每日一练
符合题目要求,问题得到解决。

总结:

文章到这里就要告一段落了,有更好的想法或问题,欢迎评论区留言。
希望今天的练习能对您有所收获,咱们下期见!文章来源地址https://www.toymoban.com/news/detail-687567.html

到了这里,关于C语言每日一练--Day(15)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • C语言每日一练------Day(5)

    本专栏为c语言练习专栏,适合刚刚学完c语言的初学者。本专栏每天会不定时更新,通过每天练习,进一步对c语言的重难点知识进行更深入的学习。 今日练习题: 错误的集合 密码检查 💓博主csdn个人主页:小小unicorn ⏩专栏分类:C语言天天练 🚚代码仓库:小小unic

    2024年02月11日
    浏览(24)
  • C语言每日一练------Day(6)

    本专栏为c语言练习专栏,适合刚刚学完c语言的初学者。本专栏每天会不定时更新,通过每天练习,进一步对c语言的重难点知识进行更深入的学习。 今日练习题: 整数转换 异或 💓博主csdn个人主页:小小unicorn ⏩专栏分类:C语言天天练 🚚代码仓库:小小unicorn的代码

    2024年02月11日
    浏览(30)
  • C语言每日一练--------Day(11)

    本专栏为c语言练习专栏,适合刚刚学完c语言的初学者。本专栏每天会不定时更新,通过每天练习,进一步对c语言的重难点知识进行更深入的学习。 今日练习题: 找到数组中消失的数字 哈希表 💓博主csdn个人主页:小小unicorn ⏩专栏分类:C语言天天练 🚚代码仓库:

    2024年02月10日
    浏览(36)
  • C语言每日一练------(Day3)

    本专栏为c语言练习专栏,适合刚刚学完c语言的初学者。本专栏每天会不定时更新,通过每天练习,进一步对c语言的重难点知识进行更深入的学习。 今天练习题的: 尼科彻斯定理 等差数列 💓博主csdn个人主页:小小unicorn ⏩专栏分类:C语言天天练 🚚代码仓库:小小

    2024年02月10日
    浏览(30)
  • C语言:选择+编程(每日一练Day11)

    目录 选择题: 题一: 题二: 题三: 题四: 题五: 编程题: 题一:最大连续1的个数 思路一: 题二:完全数计算  思路二: 本人实力有限可能对一些地方解释和理解的不够清晰,可以自己尝试读代码,或者评论区指出错误,望海涵! 感谢大佬们的一键三连! 感谢大佬们

    2024年02月09日
    浏览(37)
  • C语言:选择+编程(每日一练Day12)

    目录 选择题: 题一: 题二: 题三: 题四: 题五: 编程题: 题一:数组颠倒 思路一: 题二:单词倒排 思路一: 思路二: 本人实力有限可能对一些地方解释和理解的不够清晰,可以自己尝试读代码,或者评论区指出错误,望海涵! 感谢大佬们的一键三连! 感谢大佬们的

    2024年02月09日
    浏览(38)
  • C语言:选择+编程(每日一练Day14)

    目录 选择题: 题一: 题二: 题三: 题四: 题五: 编程题: 题一:珠玑妙算 思路一: 题二:两数之和 思路一: 本人实力有限可能对一些地方解释和理解的不够清晰,可以自己尝试读代码,或者评论区指出错误,望海涵! 感谢大佬们的一键三连! 感谢大佬们的一键三连

    2024年02月09日
    浏览(43)
  • C语言:选择+编程(每日一练Day13)

    目录 选择题: 题一: 题二: 题三: 题四: 题五: 编程题: 题一:统计每个月兔子的总数 思路一: 题二:数列的和 思路一: 本人实力有限可能对一些地方解释和理解的不够清晰,可以自己尝试读代码,或者评论区指出错误,望海涵! 感谢大佬们的一键三连! 感谢大佬

    2024年02月08日
    浏览(37)
  • C语言:选择+编程(每日一练Day16)

    目录 选择题: 题一: 题二: 题三: 题四: 题五: 编程题: 题一:数对 思路一: 题二:截取字符串 思路一: 本人实力有限可能对一些地方解释和理解的不够清晰,可以自己尝试读代码,或者评论区指出错误,望海涵! 感谢大佬们的一键三连! 感谢大佬们的一键三连!

    2024年02月09日
    浏览(34)
  • C语言:选择+编程(每日一练Day4)

    1、 设变量已正确定义,以下不能统计出一行中输入字符个数( 不包含回车符 )的程序段是( ) A: n=0;while(ch=getchar()!=\\\'n\\\')n++;     B: n=0;while(getchar()!=\\\'n\\\')n++; C: for(n=0;getchar()!=\\\'n\\\';n++);              D: n=0;for(ch=getchar();ch!=\\\'n\\\';n++); 答案解析:               对于for循环,其

    2024年02月09日
    浏览(42)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包