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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/416609.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

云原生 | 在 Kubernetes 中使用 Cilium 替代 Calico 网络插件实践指南!

[ 知识是人生的灯塔,只有不断学习,才能照亮前行的道路 ] 0x00 简述介绍 什么是 Cilium? Cilium 是一款开源软件,它基于一种名为eBPF的新的Linux内核技术提供动力,用于透明地保护使用 Docker 和 Kubernetes 等Linux 容器管理平台中部署的应用程序服务之间的网络连接,Ciliu…

kubernetes中的ParallelizeUntil()框架源码解读与使用

概述 摘要&#xff1a;本文从源码层面解读了kubernetes源码中常用的workqueue.ParallelizeParallelizeUntil()框架的源码实现&#xff0c;并且本文也将举例说明了workqueue.ParallelizeUntil()方法的典型使用场景。 正文 说明&#xff1a;基于 kubernetes v1.18.0 源码分析 …

【Qt 即时通讯系统】信息消息核心类的编写

文章目录 1. 获得唯一的 messageId2. 转成格式化时间3. 把QByteArray数据转成QIcon 1. 获得唯一的 messageId &#x1f427;通过createUuid()可以获得全球唯一的身份标识&#xff0c;Qt中对UUID是有封装的&#xff0c;获取的结果其实是一串十六进制数。 2. 转成格式化时间 …

数字化转型的内容框架解析,附华为数字化转型内容框架及方法论

数字化转型的内容框架是一个系统性、多维度的体系&#xff0c;旨在通过数字技术的融入和应用&#xff0c;对传统业务、流程和模式进行重构、升级&#xff0c;以提升效率、创造更多价值。以下是对数字化转型内容框架的详细阐述&#xff1a; 一、总体要求 数字化转型的总体要求…

Open3D 体素随机下采样

目录 一、概述 1.1原理 1.2实现步骤 1.3应用场景 二、代码实现 三、实现效果 3.1原始点云 3.2体素下采样后点云 Open3D点云算法汇总及实战案例汇总的目录地址&#xff1a; Open3D点云算法与点云深度学习案例汇总&#xff08;长期更新&#xff09;-CSDN博客 一、概述 体…

AD19基础应用技巧:捕捉对象功能的讲解鼠标”绿色十字”大光标、小光标切换

AD PCB 中心点捕捉功能&#xff1a; 线段、圆、边框中心点捕捉。 有时候不想要鼠标自动捕捉中心点怎么办&#xff1f; 关于Altium Designer 20 的捕抓功能的讲解&#xff08;https://blog.csdn.net/weixin_44599693/article/details/126177841&#xff09; ——- AD PCB画板…

详解si5338 si53xx 设计使用及STM32 iic驱动设计

背景 在实际项目中经常使用si5338 si53xx&#xff0c;进行多路时钟的倍频以生成想要的时钟信号&#xff0c;但是针对si5338 si53xx设计使用缺少相关的资料&#xff0c;本文详解si5338 si53xx 设计使用及STM32 iic驱动设计&#xff0c;本文使用工程在项目中得到测试&#xff0c…

虚拟系统VS

定义 虚拟系统VS&#xff08;Virtual System&#xff09;是指将一台物理设备PS&#xff08;Physical System&#xff09;虚拟成多个相互隔离的逻辑系统。每个VS独立工作&#xff0c;在业务功能上等同于一台独立的传统物理设备&#xff0c;如图2-1所示。 目的 随着网络规模的不…

省钱的开源项目「GitHub 热点速览」

本期&#xff0c;我从上周的热门开源项目中挑选了 5 个既省钱又省事&#xff0c;还好玩的开源项目。 首先&#xff0c;推荐的是省钱的电动汽车智能充电管理平台 evcc&#xff0c;它可以根据分时电价智能安排电动车充电时间&#xff0c;从而降低电费&#xff0c;如果你家还有太阳…

第五篇——数学边界:从毕达哥拉斯定理到费马大定理

目录 一、背景介绍二、思路&方案三、过程1.思维导图2.文章中经典的句子理解3.学习之后对于投资市场的理解4.通过这篇文章结合我知道的东西我能想到什么&#xff1f; 四、总结五、升华 一、背景介绍 数学世界让我敬畏的心&#xff0c;再一次蠢蠢欲动&#xff0c;那些伟大的…

VXLAN 为何采用UDP

VXLAN 简介 VXLAN是一种网络虚拟化技术&#xff0c;它通过在UDP数据包中封装MAC地址和IP信息&#xff0c;使得二层网络&#xff08;如以太网&#xff09;能够跨越三层网络&#xff08;如IP网络&#xff09;进行扩展。这种封装方式不仅支持TCP流量的传输&#xff0c;还能有效处…

Open3D 点云导向滤波

目录 一、概述 1.1原理 1.2实现步骤 1.3应用场景 二、代码实现 三、实现效果 3.1原始点云 3.2滤波后点云 Open3D点云算法汇总及实战案例汇总的目录地址&#xff1a; Open3D点云算法与点云深度学习案例汇总&#xff08;长期更新&#xff09;-CSDN博客 一、概述 点云导向…

香橙派开启vnc

1连接香橙派 2. 更新系统 在SSH会话中&#xff0c;首先更新系统软件包列表并升级现有软件包&#xff1a; sudo apt update sudo apt upgrade3. 安装VNC服务器 安装VNC服务器软件&#xff0c;这里以x11vnc为例&#xff1a; sudo apt install x11vnc 出现如图输入如下代码即可…

AI模拟面试记录

一&#xff1a;Java模拟面试&#xff08;9.4&#xff09; 1.哪些问题是HTTPS无法解决的&#xff1f; 1.网络延迟&#xff1a;HTTPS是基于TCP协议的&#xff0c;因此会受到TCP握手和TLS挥手带来的时间延迟&#xff0c;会导致加载的页面时间变长。 2.数据包大小&#xff1a;由…

二进制方式安装K8S

⼀、安装说明 本⽂章将演示Rocky 8 ⼆进制⽅式安装⾼可⽤k8s 1.28.0版本。 ⽣产环境中&#xff0c;建议使⽤⼩版本⼤于5的Kubernetes版本&#xff0c;⽐如1.19.5 以后的才可⽤于⽣产环境。 ⼆、集群安装 2.1 基本环境配置 请统⼀替换这些⽹段&#xff0c;Pod⽹段和service和…

Golang | Leetcode Golang题解之第393题UTF-8编码验证

题目&#xff1a; 题解&#xff1a; const mask1, mask2 1 << 7, 1<<7 | 1<<6func getBytes(num int) int {if num&mask1 0 {return 1}n : 0for mask : mask1; num&mask ! 0; mask >> 1 {nif n > 4 {return -1}}if n > 2 {return n}r…

Hadoop是什么?

Hadoop 是什么 1&#xff09;Hadoop 是一个由 Apache 开发的分布式系统基础架构&#xff1b; 2&#xff09;主要解决&#xff1a;海量数据的存储和海量数据的分析计算问题&#xff1b; 3&#xff09;广义上来说&#xff0c;HADOOP 通常是指——HADOOP 生态圈&#xff1b; H…

v-bind后面不加属性和v-bind的动态属性

v-bind 平常常见的用法我们应该都知道&#xff0c;说一说 v-bind 的不常用的方式&#xff0c;第一个就是 v-bind 后面直接不添加任何属性&#xff0c;此时会将一个对象的所有 property 都作为 prop 传入 先看官网的说法案例&#xff1a; 父组件&#xff1a; <templat…

828华为云征文|华为云Flexus X实例docker部署srs6并调优,协议使用webrtc与rtmp

828华为云征文&#xff5c;华为云Flexus X实例docker部署srs6并调优&#xff0c;协议使用webrtc与rtmp 华为云最近正在举办828 B2B企业节&#xff0c;Flexus X实例的促销力度非常大&#xff0c;特别适合那些对算力性能有高要求的小伙伴。如果你有自建MySQL、Redis、Nginx等服务…

异地多活架构计算设计

随着互联网的飞速发展,企业对业务连续性和高可用性的需求日益增加。异地多活架构作为一种高可靠性的系统设计方案,通过在地理上分散的多个数据中心部署应用和数据,有效降低了单一故障点对整个系统的影响,确保业务在灾难发生时能够持续运行。 架构设计策略 业务解耦:将系…