求最大值的演算法
⑴ 遞歸演算法求最大值
遞歸演算法求值時,如果當n=1就返回這個元素的值,否則就遞歸恩,減一個元素的最大值,與最後一個最大值之間的較大的一個數。
⑵ 條件下求最大值的演算法
#include"windows.h"
#include"iostream.h"
UINTA_num,B_num,C_num,D_num,E_num;
UINTMedic1_SUM=48;
UINTMedic2_SUM=73;
UINTMedic3_SUM=45;
UINTMedic4_SUM=67;
UINTMax_Num=0;
structpeople
{
UINTMedic1;
UINTMedic2;
UINTMedic3;
UINTMedic4;
};
UINTDIV(UINTMAX_SUM,UINTNUM)
{
if(NUM!=0)
returnMAX_SUM=MAX_SUM/NUM;
elsereturnMedic2_SUM+1;//不可能大於74
}
UINTMix_People(people&someone)
{
returnmin(min(DIV(Medic3_SUM,someone.Medic3),DIV(Medic4_SUM,someone.Medic4)),min(DIV(Medic1_SUM,someone.Medic1),DIV(Medic2_SUM,someone.Medic2)));
}
UINTGet_Num(people&A,people&B,people&C,people&D,people&E)
{
UINTA_MNUM,B_MNUM,C_MNUM,D_MNUM,E_MNUM;
UINTa_num,b_num,c_num,d_num;
UINTsum;
A_MNUM=Mix_People(A);
B_MNUM=Mix_People(B);
C_MNUM=Mix_People(C);
D_MNUM=Mix_People(D);
E_MNUM=Mix_People(E);
for(inta=1;a<=A_MNUM;a++)//a=人數
for(intb=1;b<=B_MNUM;b++)
for(intc=1;c<=C_MNUM;c++)
for(intd=1;d<=D_MNUM;d++)
for(inte=1;e<=E_MNUM;e++)
{
a_num=a*A.Medic1+b*B.Medic1+c*C.Medic1+d*D.Medic1+e*E.Medic1;
b_num=a*A.Medic2+b*B.Medic2+c*C.Medic2+d*D.Medic2+e*E.Medic2;
c_num=a*A.Medic3+b*B.Medic3+c*C.Medic3+d*D.Medic3+e*E.Medic3;
d_num=a*A.Medic4+b*B.Medic4+c*C.Medic4+d*D.Medic4+e*E.Medic4;
if((a_num<=Medic1_SUM)&&(b_num<=Medic2_SUM)&&(c_num<=Medic3_SUM)&&(d_num<=Medic4_SUM))
{
sum=a+b+c+d+e;
if(sum>Max_Num)
{
Max_Num=sum;
A_num=a;
B_num=b;
C_num=c;
D_num=d;
E_num=e;
}
}
}
returnMax_Num;
}
voidmain()
{
people A,B,C,D,E;
A.Medic1=2;
A.Medic2=1;
A.Medic3=3;
A.Medic4=0;
//////////////
B.Medic1=1;
B.Medic2=1;
B.Medic3=0;
B.Medic4=0;
//////////////
C.Medic1=2;
C.Medic2=0;
C.Medic3=3;
C.Medic4=1;
////////////////
D.Medic1=0;
D.Medic2=0;
D.Medic3=1;
D.Medic4=2;
//////////////////
E.Medic1=0;
E.Medic2=2;
E.Medic3=0;
E.Medic4=0;
cout<<"總人數:"<<Get_Num(A,B,C,D,E)<<endl;
cout<<"A病人數:"<<A_num<<endl;
cout<<"B病人數:"<<B_num<<endl;
cout<<"C病人數:"<<C_num<<endl;
cout<<"D病人數:"<<D_num<<endl;
cout<<"E病人數:"<<E_num<<endl;
system("pause");
}
⑶ 求最大值方案或演算法
PrivateSubCommand1_Click()x=CInt(InputBox("請輸入第1個數:"))Printx;Max=xFori=2To10x=CInt(InputBox("請輸入第"&i&"個數:"))Ifx>MaxThenMax=xPrintx;NextiPrintPrint"最大值=";MaxEndSub
⑷ 數學函數區間的最小值與最大值怎麼算
你好
函數的最大值和最小值:
在閉區間[a,b]上連續的函數f(x)在[a,b]上必有最大值與最小值,分別對應該區間上的函數值的最大值和最小值。
利用導數求函數的最值步驟:
(1)求f(x)在(a,b)內的極值;
(2)將f(x)的各極值與f(a)、f(b)比較得出函數f(x)在[a,b]上的最值。
用導數的方法求最值特別提醒:
①求函數的最大值和最小值需先確定函數的極大值和極小值,因此,函數極大值和極小值的判別是關鍵,極值與最值的關系:極大(小)值不一定是最大(小)值,最大(小)值也不一定是極大(小)值;
②如果僅僅是求最值,還可將上面的辦法化簡,因為函數fx在[a,b]內的全部極值,只能在f(x)的導數為零的點或導數不存在的點取得(下稱這兩種點為可疑點),所以只需要將這些可疑點求出來,然後算出f(x)在可疑點處的函數值,與區間端點處的函數值進行比較,就能求得最大值和最小值;
③當f(x)為連續函數且在[a,b]上單調時,其最大值、最小值在端點處取得。
⑸ 線性代數,二次型的最大最小值是怎麼算的
線性代數,二次型的最大最小值演算法:
1、(A-入I)x=0是齊次線性方程組,x為非零向量,入為非零常數,使得方程成立,也就是說,x的解不唯一,系數陣的非零子式最高階數小於未知數,得/A-入I/=0,當為0是為最大值,不=0就為最小值。
2、演算法公式:Q(av) =aQ(v)對於所有, Ax=入x,(A-入I)x=0,/A-入I/=0。
3、但是,x為非零向量就決定了解不唯一,但系數陣的非零子式最高階數可以等於未知數個數啊,一個非零解不也是解唯一並且2B(u,v) =Q(u+v) −Q(u) −Q(v)是在V上的雙線性形式。
線性代數種類:
4、這里的被稱為相伴雙線性形式;它是對稱雙線性形式。盡管這是非常一般性的定義,經常假定這個環R是一個域,它的特徵不是。V的兩個元素u和v被稱為正交的,如果B(u,v)=0。
5、雙線性形式B的核由正交於V的所有元素組成,而二次形式Q的核由B的核中的有Q(u)=0的所有元素u組成。 如果2是可逆的,則Q和它的相伴雙線性形式B有同樣的核。
6、雙線性形式B被稱為非奇異的,如果它的核是0;二次形式Q被稱為非奇異的,如果它的核是0,非奇異二次形式Q的正交群是保持二次形式Q的V的自同構的群。
7、二次形式Q被稱為迷向的,如果有V中的非零的v使得Q(v)=0。否則它稱為非迷向的。二次空間的一個向量或子空間也可以被稱為迷向的。如果Q(V)=0則Q被稱為完全奇異的。
(5)求最大值的演算法擴展閱讀:
最大值與最小值問題
1、特別: 求函數 把一根直徑為 d 的圓木鋸成矩形梁 ,連續函數的最值 。設 函數的最大值最小值 第三章 則其最值只能 在極值點或端點處達到 。
2、求函數最值的方法: 求 在內的極值可疑點, 最大值 最小值 當 在 內只有一個可疑極值點(駐點)時, 當 在 上單調時, 最值必在端點處達到. 對應用問題 。
3、由於所求問題的最大值和最小值 若在此點取極大 值 , 則也是最大 值 .(小) ,(小) 客觀存在,所以在只有一個極值時。
二次型概念
4、其中a, ...,f是系數。注意一般的二次函數和二次方程不是二次形式的例子,因為它們不總是齊次的。任何非零的n維二次形式定義在投影空間中一個 (n-2)維的投影空間。在這種方式下可把3維二次形式可視化為圓錐曲線。
5、術語二次型也經常用來提及二次空間,它是有序對(V,q),這里的V是在域k上的向量空間,而q:V→k是在V上的二次形式。例如,在三維歐幾里得空間中兩個點之間的距離可以採用涉及六個變數的二次形式的平方根來找到。
線性代數最大值最小值定義
6、線性代數是數學的一個分支,它的研究對象是向量,向量空間(或稱線性空間),線性變換和有限維的線性方程組。向量空間是現代數學的一個重要課題;因而,線性代數被廣泛地應用於抽象代數和泛函分析中。
7、通過解析幾何,線性代數得以被具體表示。線性代數的理論已被泛化為運算元理論。由於科學研究中的非線性模型通常可以被近似為線性模型,使得線性代數被廣泛地應用於自然科學和社會科學中。
⑹ c++求數組中的最大值
用於查找數組中最高值(其實就是最大值,但是為對應源代碼中的 highest,故仍稱為最高值)和最低值(其實就是最小值,但是為對應源代碼中的 lowest,故仍稱為最低值)的演算法非常相似。首先,來看一下在數組中尋找最高值的代碼。假設在程序中出現了以下語句。
const int SIZE = 10;
int numbers[SIZE] = {15, 6, 3, 11, 22, 4, 0, 1, 9, 12};
查找數組中最高值的代碼如下所示:
int count;
int highest;
highest = numbers[0];
for (count = 1; count < SIZE; count++)
{
if (numbers[count] > highest)
highest = numbers[count];
}
首先,該語句將第一個數組元素中的值復制到名為 highest 的變數中。然後,循環將從下標 1 開始的所有其餘數組元素與存儲在 highest 中的值進行比較。每次當它發現數組元素中的值大於 highest 中的值時,都會將其復制到 highest。循環完成後,highest 將包含數組中最的值。
以下代碼將找到數組中的最低值。對比之後可以發現,它與查找最高值的代碼幾乎相同。
int count;
int lowest;
lowest = numbers[0];
for (count = 1; count < SIZE:count++)
{
if (numbers[count] < lowest);
lowest = numbers[count];
}
當循環完成後,lowest 將包含數組中的最低值。
⑺ 編寫遞歸演算法求數組A最大值
答案中i和j表示A[]數組中求最大值的起始下標和結束下標。
函數findmax是用於找出A[]中下標從i到j之間的最大值。
如果i==j,則最大值就等於A[i];否則,A[i]~A[j]之間最大值的最大值就等於A[i]與(A[i+1]~A[j]之間最大值)中較大的一個值。
⑻ 請問:文字說明求一維數組中最大值的演算法
首先,在數組中輸入n個數字,假設第一個數為最大值,將其與後面的數值一一進行比較,當遇到最大值時記錄其坐標,將其與第一個數進行交換,這樣就能找到一維數組中最大值了 ,下面是程序
#include<stdio.h>
#define NUM 10
void main()
{
int a[NUM];
int i,j,k,t;
printf("input %d numbers\n",NUM);
for(i=0;i<10;i++)
scanf("%d",&a[i]);
//令第一個數為最小數 a[k]
for(j=0;j<NUM-1;j++)
{
k=j;
for(i=j+1;i<NUM;i++)
if(a[k]>a[i])
k=i;
if(k!=j)
{
t=a[j];
a[j]=a[k];
a[k]=t;
}
}
printf("%5d",a[9]);
printf("\n");
}
這是選擇排序法,它的效率高點
⑼ 如何求任意三個實數的最大值 請設計一個演算法
假設這三個數分別為:a、b、c
設最大的數為:max
如果
a
>=
b,則
max=a,反之
max=b;
如果
max
>=c
,則
max=max
,反之
max=c;
這樣三個數中最大的數就是max
了。
⑽ 求最大值與最小值的演算法
int[] n = {1,2,3,4,5,6,7,8,9,10};int max = n[0];int min = n[0];for(int i = 1;i < 10;i++){ if(min > n[i]){ min = n[i]; } if(max < n[i]){ max = n[i]; }}System.out.println("max=" + max);System.out.println("min=" + min);