C++如何在不使用排序的情况下从大小为n的数组中打印最小的数字

San*_*sal 3 c++ arrays sorting algorithm primes

我必须WAP打印给定大小的数组中最小和最大的素数而不进行排序.我已经编写了最大数字的代码,但是对于最小的数字,它没有运行,因为我将素数的值与初始化为0的min进行比较,但是如果我将If_else分成两部分

  1. 包含c == 2检查
  2. 包含[i]

然后它运行,因为然后在c == 2,min已经从数组中提供了一个值,但是如果我一起运行它们,那么在这里任何工作都不能让我获得最小的数字而不会破坏if_else.代码如下

#include <iostream.h>
#include <conio.h>
#include <stdio.h>
#include <ctype.h>

void main ()
{
  int i,j,m;
  clrscr();
  int a[20],x,min=0,c=0;
  cout<<"Enter size of array "<<endl;
  cin>>m;
  cout<<"Enter "<<m<<" Numbers "<<endl;
  for(i=0;i<m;i++)
  {
    cin>>a[i];
  }
  for(i=0;i<m;i++)
  {
    for(j=1;j<=a[i];j++)
    {
      if(a[i]%j==0)
      {
        c++;
      }
    }
    if(c==2 && a[i]<min)//problem is here 
    {
      min=a[i];
    }
    c=0;
  }
  cout<<endl<<"the min prime no out of array is " <<min;
  getch();
}
Run Code Online (Sandbox Code Playgroud)

Jar*_*d42 8

解决你的问题:

  • 过滤素数
  • 然后find_min_max

对于min_max,您可以使用以下内容:

void find_min_max(const std::vector<int>& primes, int& minValue, int& maxValue)
{
    assert(!primes.empty());

    auto result = std::minmax_element(primes.begin(), primes.end());
    minValue = *result.first;
    maxValue = *result.second;
}
Run Code Online (Sandbox Code Playgroud)