微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

想打印下一个最大的数字

如何解决想打印下一个最大的数字

那么问题来了: 考虑一个名为 Job 的类,它具有作为数据成员的截止日期和相关的 getter/setter 方法)。假设您必须根据截止日期安排两个最早的作业。那是, 如果系统中有三个有截止日期的作业(分别是deadline1、deadline2和deadline3) 然后系统应该报告前两个最早的作业(具有最小的截止日期值)。你可能需要 找到具有最小和第二小的值的截止日期。

这是我的代码

#include<iostream>
using namespace std;
class job
{
private:
    int Deadline;
public:
    static int i;
    void setDeadline(int a);
    int getDeadline();
};

void job::setDeadline(int a)
{
    Deadline = a;
    cout << "Job " << i << " Has Deadline " << Deadline << endl;
}

int job::getDeadline()
{
    return Deadline;
}
int job::i = 1;

int main()
{
    job job1,job2,job3,job4,job5,job6,job7,job8,job9,job10,count;

    job1.setDeadline(5);
    count.i++;
    job2.setDeadline(3);
    count.i++;
    job3.setDeadline(6);
    count.i++;
    job4.setDeadline(12);
    count.i++;
    job5.setDeadline(31);
    count.i++;
    job6.setDeadline(20);
    count.i++;
    job7.setDeadline(19);
    count.i++;
    job8.setDeadline(2);
    count.i++;
    job9.setDeadline(8);
    count.i++;
    job10.setDeadline(7);

    int array[10] = { job1.getDeadline(),job2.getDeadline(),job3.getDeadline(),job4.getDeadline(),job5.getDeadline(),job6.getDeadline(),job7.getDeadline(),job8.getDeadline(),job9.getDeadline(),job10.getDeadline() };
    int temp = array[0],store = 0,first = 0,second = 0;


    for (int i = 0; i <= 9; i++)
    {
        if (temp > array[i])
        {
            temp = array[i];
        }
    }
    for (int i = 0; i <= 9; i++)
    {
        if (temp == array[i])
        {
            first = i + 1;
            break;
        }
    }
    temp = array[0];
    for (int i = 0; i <= 9; i++)
    {
        if (temp > array[i])
        {
            temp = array[i];
        }
    }
    for (int i = 0; i <= 9; i++)
    {
        if (temp == array[i])
        {
            second = i + 1;
        }
    }
    cout << "\nJob " << first << " and Job " << second << " are earliest";
    return 0;
}

我面临的问题是两次都打印第一个最小值。我想打印前 2 个最小值。我该怎么做?

解决方法

当您查找第一个值时,您会遍历数组并找到截止日期最短的工作,并用工作 ID 填充“第一个”(顺便说一句,如果您想将“工作 ID”与索引,我个人会让变量从零开始,所以 job0、job1 等等直到 job9)

当您查找第二个值时,您会执行完全相同的操作,因此您找到的工作又是截止日期最短的工作,并使用该信息填写“第二个”。

因此,当您两次执行完全相同的操作时,您将获得完全相同的值。当您搜索第二个值时,您应该考虑“first”,这样您就可以忽略已经用于“first”的作业,并且在这种情况下不更新“temp”(如果您将其命名为作业从零开始,因为您不必不断向索引添加 1)。

,

我面临的问题是两次都打印第一个最小值。我想打印前 2 个最小值。我该怎么做?

使用您的解决方案:通过创建另一个临时数组,删除您已经发现的第一个元素。

我将您写为一个使用对向量的最小可执行示例,因为您没有提到限制或任何内容 - 这是我能想到的最优雅的解决方案:

#include <iostream>
#include <vector>
#include <string>

bool sortVecBySec(const std::pair<std::string,int> &a,const std::pair<std::string,int> &b)
 {
   return (a.second < b.second);
 }


int main()
{

  //Driver function to sort the vector elements by
  //the second element of pairs
  std::vector<std::pair <std::string,int>> v;
  std::string job[10];
  int deadline[10] = {5,3,6,12,31,20,19,2,8,7};
  int n = sizeof(job)/sizeof(job[0]);

  //Propagate string array
  for(int i{}; i < 10;++i){
    job[i] = "Job " + (std::to_string(i+1));
  }

  //Enter values in vector of pairs
  for(int i{}; i<n; ++i){
    v.push_back(make_pair(job[i],deadline[i]));
  }

  //Printing the vector of pairs
  std::cout << "Vector of pairs as it is before\n";
  for(int i{}; i< n; i++){
    std::cout << v[i].first << " = " <<v[i].second << '\n';
  }

  //Using sort() function to sort by 2nd element of pairs
  sort(v.begin(),v.end(),sortVecBySec);

  //Printing the vector of pairs
  std::cout << "\nVector of pairs from shortest to longest\n";
  for(int i{}; i< 2; i++){
    std::cout << v[i].first << " = " <<v[i].second << '\n';
  }

  std::cin.get();
  return 0;
}

如果您想打印所有作业,只需在最后一个打印部分使用 n 变量而不是 2

我认为这应该对您有所帮助,并且在课堂上解析它应该不会太难。

,

首先,当您找到最早的截止日期时,您可以通过将索引保存在那里来节省额外的一轮

first

在搜索下一个更高的截止日期值时,您必须考虑 temp = first > 1 ? array[0] : array[1]; for (int i = 0; i <= 9; i++) { if (temp > array[i] && array[i] > array[first]) { temp = array[i]; second = i + 1; } } 。既为起始值,后来与其他值比较时

    if (temp > array[i] && i != first)
    {
        temp = array[i];
        second = i + 1;
    }

请注意,当您有多个相等的值时,这将无法正常工作。 对于这种情况,请比较索引值,例如

Dim oExcel,oWB    
Set oExcel = CreateObject("excel.application")
Set oWB = oExcel.Workbooks.Add()

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。