使用C++从给定的真假语句中找出最诚实的人


判断个人陈述的诚实性有时可能是一项艰巨的任务——尤其是在评估由诚实和欺骗成员组成的混合群体中的那些人时。值得庆幸的是,C++为我们提供了一种基于算法的方法,可以帮助识别其中最值得信赖的人!在这篇文章中,由各自领域的专家撰写。让我们仔细探讨C++如何应对这些挑战,以及我们如何通过提供专家编写的逐步说明来学习其语法并从中受益!我们还将提供两个可执行代码示例,以说明不同的方法以及我们的讨论/分析。让我们踏上这段令人振奋的旅程,揭开人们陈述中的真相和透明度!

语法

在我们深入研究算法之前,让我们熟悉一下我们将在以下代码片段中使用的语法:

// Syntax for defining the structure to represent a person
struct Person {
   std::string name;
   bool isHonest;
};

// Syntax for defining a vector of persons
std::vector<Person> people;

算法

为了确定群体中最诚实的人,我们将遵循以下逐步算法:

  • 初始化一个空的 persons 向量,people。

  • 解析每个人提供的陈述,记录他们的姓名以及他们声称自己是诚实还是欺骗。

  • 迭代 people 向量,将每个人的陈述与所有其他人的陈述进行比较。

  • 对于每个人,计算他们被其他人反驳的次数。此计数表示声称该人撒谎的人数。

  • 确定矛盾计数最低的人。如果出现平局,则选择对其诚实主张最少的人。

方法1:蛮力比较

在这种方法中,我们将每个人的陈述与所有其他人的陈述进行比较。矛盾计数最低的人将被认为是最诚实的。

示例

#include <iostream>
#include <vector>
#include <climits>

struct Person {
   std::string name;
   bool isHonest;
};

Person findMostHonestPerson(const std::vector<Person>& people) {
   Person mostHonest;
   int minContradictionCount = INT_MAX;

   for (const auto& person : people) {
      int contradictionCount = 0;

      for (const auto& otherPerson : people) {
         if (person.name != otherPerson.name) {
            if (person.isHonest != otherPerson.isHonest) {
               contradictionCount++;
            }
         }
      }

      if (contradictionCount < minContradictionCount) {
         minContradictionCount = contradictionCount;
         mostHonest = person;
      }
   }
   return mostHonest;
}

int main() {
   std::vector<Person> people = {
      {"John", true},
      {"Sarah", false},
      {"Michael", true},
      {"Emily", true},
      {"David", false}
   };

   Person mostHonestPerson = findMostHonestPerson(people);

   std::cout << "The most honest person is: " << mostHonestPerson.name << std::endl;

   return 0;
}

输出

The most honest person is: John

解释

在蛮力比较方法中,我们将每个人的陈述与所有其他人的陈述进行比较,以确定最诚实的人。我们将最小矛盾计数初始化为无穷大,并迭代每个人,计算他们与他人的矛盾次数。矛盾计数最低的人被认为是最诚实的。如果出现平局,我们将优先考虑对其诚实主张最少的人。

这种方法穷举检查每种陈述组合,使其可靠,但对于较大的群体而言,计算成本可能很高。识别具有最高一致性和最少矛盾陈述的人的一种可行方法是比较每个人的陈述。但是,在处理多个人时,此过程可能并不实用。

方法2:投票系统

我们旨在通过引入支持这一价值观的投票系统,在我们的社区中营造诚实的环境。每个成员都可以投票给另一个他们完全信任其道德和伦理品格的个人。获得最多票数的人将被尊为我们中间特别诚实和可靠的人。

示例

#include <iostream>
#include <vector>

struct Person {
   std::string name;
   bool isHonest;
};

Person findMostHonestPerson(const std::vector<Person>& people) {
   Person mostHonest;
   int maxVoteCount = 0;

   for (const auto& person : people) {
      int voteCount = 0;

      for (const auto& otherPerson : people) {
         if (person.name != otherPerson.name) {
            if (person.isHonest && otherPerson.isHonest) {
               voteCount++;
            }
            else if (!person.isHonest && !otherPerson.isHonest) {
               voteCount++;
            }
         }
      }

      if (voteCount > maxVoteCount) {
         maxVoteCount = voteCount;
         mostHonest = person;
      }
   }

   return mostHonest;
}

int main() {
   std::vector<Person> people = {
      {"John", true},
      {"Sarah", false},
      {"Michael", true},
      {"Emily", true},
      {"David", false}
   };

   Person mostHonestPerson = findMostHonestPerson(people);

   std::cout << "The most honest person is: " << mostHonestPerson.name << std::endl;

   return 0;
}

输出

The most honest person is: John

解释

投票系统方法涉及使用投票机制来确定最诚实的人。每个人都可以投票给他们认为诚实的人。我们迭代这些人并计算每个人收到的票数。我们投票的目标是集中在选举我们相信体现诚实的人。通过选择获得多数票的人;他们应该拥有这些特质。但是,如果多个候选人获得相同的票数,则优先考虑那些对他们有不诚实行为指控较少的人。

这种方法依赖于集体使用群体意见来有效地确定任何给定情况下的诚实个人。该过程涉及对选票进行制表和审查选民对每个候选人的看法,以确定在特定情况下谁的信誉最突出。

与通常涉及逐行费力评估每种可能的解决方案的蛮力方法相比,这种技术对于较大的人群可能更有效,因为根本不需要进行详尽的评估。

尽管如此,该方法的支持者认为,仅仅依靠参与者在有效评估彼此的诚实性方面的专业知识,因此其成功取决于人为错误率和偏差以及此类评估中涉及的其他因素。

这两种方法都提供了关于识别最诚实的人的不同视角。蛮力方法检查个体矛盾,而投票系统方法依赖于群体的集体智慧。选择合适的方法取决于具体情况、群体规模和可用信息。通过了解这些方法,我们可以处理诚实至关重要的情况,并根据从这些方法中获得的见解做出明智的决定。

结论

确定群体中最诚实的人并非易事。然而,有了C++和我们前面列举的技术,我们可以大大简化事情。通过比较分析和评估系统的运用,识别可能是诚实的候选人变得可行。但请记住,当您根据您的具体案例场景调整这些技术时,务必相应地个性化它们。然而,最重要的是,让这些知识能够在诚实至关重要的时刻运用其原则——祝您好运!

更新于:2023年7月25日

49 次浏览

开启你的职业生涯

完成课程获得认证

开始
广告