【图解版】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

相关文章

C语言进阶(预处理命令详解)

《C语言进阶(预处理命令详解)》文章讲解了宏定义规范、头文件包含方式及条件编译应用,强调带参宏需加括号避免计算错误,头文件应声明函数原型以便主函数调用,条件编译通过宏定义控制代码编译,适用于测试与模块... 目录1.宏定义1.1不带参宏1.2带参宏2.头文件的包含2.1头文件中的内容2.2工程结构3.条件编

Go语言并发之通知退出机制的实现

《Go语言并发之通知退出机制的实现》本文主要介绍了Go语言并发之通知退出机制的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧... 目录1、通知退出机制1.1 进程/main函数退出1.2 通过channel退出1.3 通过cont

Go语言编译环境设置教程

《Go语言编译环境设置教程》Go语言支持高并发(goroutine)、自动垃圾回收,编译为跨平台二进制文件,云原生兼容且社区活跃,开发便捷,内置测试与vet工具辅助检测错误,依赖模块化管理,提升开发效... 目录Go语言优势下载 Go  配置编译环境配置 GOPROXYIDE 设置(VS Code)一些基本

深入理解Go语言中二维切片的使用

《深入理解Go语言中二维切片的使用》本文深入讲解了Go语言中二维切片的概念与应用,用于表示矩阵、表格等二维数据结构,文中通过示例代码介绍的非常详细,需要的朋友们下面随着小编来一起学习学习吧... 目录引言二维切片的基本概念定义创建二维切片二维切片的操作访问元素修改元素遍历二维切片二维切片的动态调整追加行动态

Go语言中make和new的区别及说明

《Go语言中make和new的区别及说明》:本文主要介绍Go语言中make和new的区别及说明,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1 概述2 new 函数2.1 功能2.2 语法2.3 初始化案例3 make 函数3.1 功能3.2 语法3.3 初始化

Go语言中nil判断的注意事项(最新推荐)

《Go语言中nil判断的注意事项(最新推荐)》本文给大家介绍Go语言中nil判断的注意事项,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录1.接口变量的特殊行为2.nil的合法类型3.nil值的实用行为4.自定义类型与nil5.反射判断nil6.函数返回的

Go语言数据库编程GORM 的基本使用详解

《Go语言数据库编程GORM的基本使用详解》GORM是Go语言流行的ORM框架,封装database/sql,支持自动迁移、关联、事务等,提供CRUD、条件查询、钩子函数、日志等功能,简化数据库操作... 目录一、安装与初始化1. 安装 GORM 及数据库驱动2. 建立数据库连接二、定义模型结构体三、自动迁

Go语言代码格式化的技巧分享

《Go语言代码格式化的技巧分享》在Go语言的开发过程中,代码格式化是一个看似细微却至关重要的环节,良好的代码格式化不仅能提升代码的可读性,还能促进团队协作,减少因代码风格差异引发的问题,Go在代码格式... 目录一、Go 语言代码格式化的重要性二、Go 语言代码格式化工具:gofmt 与 go fmt(一)

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

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

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

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