C++编写金块问题的分治算法

C++编写金块问题的分治算法,第1张

#include<stdio.h>

#include<string.h>

#include<algorithm>

#include<queue>

using namespace std

const int MAX=100

int max_(int a,int b){return a>b?a:b}

int min_(int a,int b){return a<b?a:b}

int findMax(int a[],int s,int t)

{

if(s==t-1)return a[s]

int mid=(s+t)>>1

return max_(findMax(a,s,mid),findMax(a,mid,t))

}

int findMin(int a[],int s,int t)

{

if(s==t-1)return a[s]

int mid=(s+t)>>1

return min_(findMin(a,s,mid),findMin(a,mid,t))

}

int main()

{

//输入 *** 作,1为取出最大

int a[MAX]

int n

int i

scanf("%d",&n)

for(i=0i<ni++)

scanf("%d",&a[i])

printf("最大:%d\n",findMax(a,0,n))

printf("最小:%d\n",findMin(a,0,n))

return 0

}

#include "stdio.h"

int k1,k2

void fun(int *d,int m,int n)

{

int count

count=0

for(int j=0j<nj++)

{

if(d[m]<=d[j])

count=count+1

}

if(n-count+1>=k1 &&n-count+1<=k2)

printf("%d ",d[m])

}

int main()

{

int d[100],n

printf("输入整数个数:")

scanf("%d",&n)

printf("输入%d个整数:\n",n)

for(int i=0i<ni++)

scanf("%d",&d[i])

printf("输入范围上下限(第k1小到第k2小之间):")

scanf("%d %d",&k1,&k2)

for(int j=0j<nj++)//逐个看是否第k1小到第k2小之间

fun(d,j,n)

}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12204088.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-21
下一篇 2023-05-21

发表评论

登录后才能评论

评论列表(0条)

保存