【图解版】Likes Vs Dislikes——C语言提高题【7 kyu】

2024-09-04 23:36

本文主要是介绍【图解版】Likes Vs Dislikes——C语言提高题【7 kyu】,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一、原题

链接:Training on Likes Vs Dislikes | Codewars

YouTube had a like and a dislike button, which allowed users to express their opinions about particular content. It was set up in such a way that you cannot like and dislike a video at the same time. There are two other interesting rules to be noted about the interface: Pressing a button, which is already active, will undo your press. If you press the like button after pressing the dislike button, the like button overwrites the previous "Dislike" state. The same is true for the other way round.

二、解题

1、分析

1)前后不一致,后面覆盖前面

like_or_dislike([Dislike, Like]) ➞ Like

2) 前后一样,则为NOTHING

like_or_dislike([Like, Like]) ➞ Nothing

3)前面结果为NOTHONG, 以后面为主

like_or_dislike([Like, Like, Like]) ➞ Like

 4)题中附带要求

  • 如果当前没有按钮处于活动状态,则返回 。Nothing
  • 如果列表为空,则返回 。Nothing

 2、思路

1)思路一【此思路简单】

        整体思想:将NOTHING与LIKE、DISLIKE放在同一地位思考,可发现,后面的与前面紧邻的不同,后面的就会将前面的覆盖。

        方法:

(1)创建BUTTON(item) :enum button item=NOTHING;

(2)使item与events[n]逐个比较,按照原则将结果存入item中;

(3)返回item;

2)思路二【此思路颇为复杂】【“数字化”处理不当,化简为繁】

(1)列表为空,返回NOTHONG

(2)长度为一,直接返回

(3)当长度>=2时:

        创建item=100;item==1表示LIKE,item==-1表示DISLIKE,item=NOTHING;

        

三 、Myway

【最大收获:好思路极大限度降低问题难度】

1、思路一代码

#include <stddef.h>enum button { NOTHING, LIKE, DISLIKE };enum button like_or_dislike (size_t n, const enum button events[n])
{ enum button item=NOTHING;for(size_t i=0;i<n;i++){if(events[i]!=item){item=events[i];}else if(events[i]==item){item=NOTHING;}}return item;} 

2、思路二代码:

#include <stddef.h>enum button { NOTHING, LIKE, DISLIKE };enum button like_or_dislike (size_t n, const enum button events[n])
{ if(n<=0) return NOTHING;if(n==1){if(events[0]==LIKE){return LIKE;}if(events[0]==DISLIKE){//enum button events[0]==DISLIKE是错误的。return DISLIKE;}
}  int item=100;for(int i=0;i<(int)(n-1);i++){if(events[i]==events[i+1]){if(item==0){if(events[i]==LIKE)  item=1;else item=-1;}else item=0;}else{if(item==0){if(events[i+1]==LIKE){item=1;}else item=-1;}else if(item==1){if(events[i+1]==LIKE){item=0;}else item=-1;}else if(item==-1){if(events[i+1]==LIKE){item=1;}else item=0;}else{if(events[i+1]==LIKE) item=1;if(events[i+1]==DISLIKE) item=-1;}}}printf("%d\n",item);if(item==-1){return DISLIKE;}else if(item==1){return LIKE;}else if(item==0){return NOTHING;}} 

这篇关于【图解版】Likes Vs Dislikes——C语言提高题【7 kyu】的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1137354

相关文章

Go语言中泄漏缓冲区的问题解决

《Go语言中泄漏缓冲区的问题解决》缓冲区是一种常见的数据结构,常被用于在不同的并发单元之间传递数据,然而,若缓冲区使用不当,就可能引发泄漏缓冲区问题,本文就来介绍一下问题的解决,感兴趣的可以了解一下... 目录引言泄漏缓冲区的基本概念代码示例:泄漏缓冲区的产生项目场景:Web 服务器中的请求缓冲场景描述代码

Go语言如何判断两张图片的相似度

《Go语言如何判断两张图片的相似度》这篇文章主要为大家详细介绍了Go语言如何中实现判断两张图片的相似度的两种方法,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 在介绍技术细节前,我们先来看看图片对比在哪些场景下可以用得到:图片去重:自动删除重复图片,为存储空间"瘦身"。想象你是一个

Go语言中Recover机制的使用

《Go语言中Recover机制的使用》Go语言的recover机制通过defer函数捕获panic,实现异常恢复与程序稳定性,具有一定的参考价值,感兴趣的可以了解一下... 目录引言Recover 的基本概念基本代码示例简单的 Recover 示例嵌套函数中的 Recover项目场景中的应用Web 服务器中

VS配置好Qt环境之后但无法打开ui界面的问题解决

《VS配置好Qt环境之后但无法打开ui界面的问题解决》本文主要介绍了VS配置好Qt环境之后但无法打开ui界面的问题解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要... 目UKeLvb录找到Qt安装目录中designer.UKeLvBexe的路径找到vs中的解决方案资源

Java使用MethodHandle来替代反射,提高性能问题

《Java使用MethodHandle来替代反射,提高性能问题》:本文主要介绍Java使用MethodHandle来替代反射,提高性能问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑... 目录一、认识MethodHandle1、简介2、使用方式3、与反射的区别二、示例1、基本使用2、(重要)

Go语言中使用JWT进行身份验证的几种方式

《Go语言中使用JWT进行身份验证的几种方式》本文主要介绍了Go语言中使用JWT进行身份验证的几种方式,包括dgrijalva/jwt-go、golang-jwt/jwt、lestrrat-go/jw... 目录简介1. github.com/dgrijalva/jwt-go安装:使用示例:解释:2. gi

Go 语言中的 Struct Tag 的用法详解

《Go语言中的StructTag的用法详解》在Go语言中,结构体字段标签(StructTag)是一种用于给字段添加元信息(metadata)的机制,常用于序列化(如JSON、XML)、ORM映... 目录一、结构体标签的基本语法二、json:"token"的具体含义三、常见的标签格式变体四、使用示例五、使用

Go语言使用slices包轻松实现排序功能

《Go语言使用slices包轻松实现排序功能》在Go语言开发中,对数据进行排序是常见的需求,Go1.18版本引入的slices包提供了简洁高效的排序解决方案,支持内置类型和用户自定义类型的排序操作,本... 目录一、内置类型排序:字符串与整数的应用1. 字符串切片排序2. 整数切片排序二、检查切片排序状态:

基于Go语言实现Base62编码的三种方式以及对比分析

《基于Go语言实现Base62编码的三种方式以及对比分析》Base62编码是一种在字符编码中使用62个字符的编码方式,在计算机科学中,,Go语言是一种静态类型、编译型语言,它由Google开发并开源,... 目录一、标准库现状与解决方案1. 标准库对比表2. 解决方案完整实现代码(含边界处理)二、关键实现细

如何合理管控Java语言的异常

《如何合理管控Java语言的异常》:本文主要介绍如何合理管控Java语言的异常问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、介绍2、Thorwable类3、Error4、Exception类4.1、检查异常4.2、运行时异常5、处理方式5.1. 捕获异常