1. 程式人生 > >C++求次最值

C++求次最值

     首先在main方法裡面定義一個整型陣列,然後呼叫getMin()方法,getMin方法首先傳入兩個引數(一個是陣列引數,另一個是陣列長度),在方法裡面通過for    if     來判斷!先是求出最值的下標,然後把最值下標i賦值給b,再判斷buf[i]!=buf[b]後,再繼續便利這個沒有最小值的陣列,再將這個沒有最小值的陣列再求最小值就得到了次最值!

#include<iostream>
using namespace std;

/*
功能:求最小值
函式名:getMin
返回值型別:int
*/

int getMin(int buf[100],int ilen)
{
	//buf[0]=999;
	int listen=0;
	int b=0;
	for(int i=0;i<9;i++)
	{
		if(buf[b]>buf[i])
		{
			 b=i;
		}
		if(buf[i]!=buf[b])
		{
			for(int y=0;y<9;y++)
			{
				if(buf[listen]>buf[i])
				{
					listen=i;
				}
			}
		}
	}
	return buf[listen];
}

int main()
{
	//定義一個整型陣列
	int buf[100]={11,9,2,5,4,33,6,8,7};
	cout<<"呼叫之前:buf[0]="<<buf[0]<<endl;
	//呼叫函式:
	cout<<getMin(buf,9)<<endl;
	//cout<<"呼叫之後:"<<buf[0]<<endl;
}

第二種方法.

#include<iostream>
using namespace std;
//求次大值的元素

int GetS(int buf[100],int ilen)
{
	    int mlisten,i,slisten;	//最大值
	    for(i=0,mlisten=0,slisten=0;i<ilen;i++)
	    {
		    if(buf[mlisten]<buf[i])
		    {
		    	slisten=mlisten;	//之前的最大值成為次大值
		    	mlisten=i;
		    }
		    else if(buf[i]>buf[slisten])     //如果新元素比最大值小
		    {
		    	slisten=i;
		    }
        }
	return slisten;
}

//求次大值
int GetS(double buf[100],int ilen)
{
	int mlisten,i,slisten;	//最大值
	for(i=1,mlisten=0,slisten=0;i<ilen;i++)
	{
		if(buf[mlisten]<buf[i])
		{
			slisten=mlisten;	//之前的最大值成為次大值
			mlisten=i;
		}
		else if(buf[i]>buf[slisten] || slisten==mlisten)   //如果新元素比最大值小
		{
			slisten=i;
		}
	}
	return slisten;
}

//主函式
int main()
{
	int buf[100]={1,2,6,5,3,4,7,9,8};

	double score[100]={99.9,98.1,78.9,58.9};
	//呼叫函式
	cout<<GetS(buf,9)<<endl;
	cout<<score[GetS(score,4)]<<endl;
}

相關推薦

C++

     首先在main方法裡面定義一個整型陣列,然後呼叫getMin()方法,getMin方法首先傳入兩個引數(一個是陣列引數,另一個是陣列長度),在方法裡面通過for    if     來判斷!先

HDU6447 YJJ's Salesman-2018CCPC網絡賽-線段樹區間+離散化+dp

fine 滾動 tps 記得 size names sum 離散 圖片 目錄 Catalog Solution: (有任何問題歡迎留言或私聊 && 歡迎交流討論哦 Catalog Problem:Portal傳送門 ?原題目描述在最下面。 ?1e5個點

樹狀陣列區間和單點更新

題目連結:https://cn.vjudge.net/contest/66989#problem/B AC程式碼: #include<iostream> #include<string> #include<cstring> #include<cm

C#單詞長公共字首

例如:class、classify、clean的公共最長字首為cl。 例如:count、key、open的最長公共字首為空字串。 程式碼如下: using System; using System.Collections.Generic; using System.Linq; using

樹狀陣列區間

1627: 極差 Time Limit: 1 Sec Memory Limit: 128 MB [Submit][Status][Web Board] Description 還記得高中數學的統計部分的極差嗎?既然你能上zcmu計算機及其相關專業,想必計算能力是很厲害的,有一個實

2018CCPC網路賽-線段樹區間+離散化+dp

 原題目描述在最下面。  1e5個點,問從(0,0)走到(1e9,1e9)的最大收益。  當你從(u-1,v-1)走到(u,v)時,你可以獲得點(u,v)的權值。 solution:  十分詳細了。  直接線段樹區間最值。當然也可以樹狀陣列,不能st表。  dp

C語言:問題

求最值問題 1.輸入n個整數,求最大值,最小值和平均值 #include<stdio.h> int main() { int i, avg = 0, max = 0, min = 0, n, k; printf("請

遺傳演算法上機系列之用遺傳演算法函式問題(附自己寫的程式碼)

本文基於下面的最值問題進行求解: maxf(x1,x2)=21.5+x1sin(4πx1)+x2sin(20πx2)\ max f(x_1,x_2)=21.5+x_1sin(4\pi x_1)+x_2sin(20\pi x_2)maxf(x1​,x2​)=21.

C語言:之差

題目: #include <stdio.h> int main() { int n,a[10000],i=0,max,min,t; scanf("%d",&n); while(scanf("%d",&a[i])!=EOF) i++; max=

山東理工大學ACM平臺題答案 1170 C語言實驗——

C語言實驗——最值 Time Limit: 1000ms   Memory limit: 65536K  有疑問?點這裡^_^ 題目描述 有一個長度為n的整數序列。請寫一個程式,把序列中的最小

RMQ 區間

pku 3264 #include <cstdio> #include <cstring> #include <string> #include <al

apply()/call()陣列

var  numbers = [5, 458 , 120 , -215 ];  var  maxInNumbers = Math.max.apply(this, numbers);   console.

RMQ區間問題

#include <iostream> #include <stdio.h> #include <cstring> #include <algorithm&g

C++矩陣小路徑和進階方法空間複雜度O(min {row, col})

#include <iostream> int minPathSum_pro(const int(*pArr) [10], const int &row, const int &col); int main() {int row = 0, col

hdu1754-I Hate It 線段樹RMQ演算法區間問題

I Hate It Time Limit: 9000/3000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total

RMQ區間 nlog(n)

RMQ演算法全稱為(Range Minimum/Maximum Query)意思是給你一個長度為n的陣列A,求出給定區間的最值的下標。當然我們可以採用列舉,但是我們也可以使用線段樹來優化,複雜度為

2823 Sliding Window 區間 線段樹好慢,能用單調佇列

Sliding WindowTime Limit: 12000MSMemory Limit: 65536KTotal Submissions: 14533Accepted: 4096Case Time Limit: 5000MSDescriptionAn array of s

C語言出陣列中的

#include<stdio.h> //改陣列大小隻需要修改 N後面的數字 #define N 5 int main(void){ int arr[N]={5,6,8,3,9}; int max= 0; //定義最大值並賦值 int mid= 0

C++兩個數的

eof sizeof ios int sig turn c++ a + b -a //不使用if,:?等推斷語句。求兩個數字中最大的那個數字。 #include<iostream> using namespace std; int main(

紫色的手鏈(的異或大)

tdi 一個 data 不同的 col std 不同 date 格式 描述 那是木姑娘十七歲時,我送給她的生日禮物。(後來手鏈也成為了我最喜歡的出題媒介) 記得最初買的手鏈,由n段紫色的珠子構成,每一顆珠子都被賦予了一種價值評價w[i]。 為了木姑娘,我只惋惜自己不能摘下漫