蓝桥杯真题 19省Ca3-最大降雨量 由于沙之国长年干旱,法师小明准备施展自己的一个神秘法术来求雨。 这个法术需要用到他手中的 49 张法术符,上面分别写着 1 至 49 这 49 个数字。法术一

【问题描述】

由于沙之国长年干旱,法师小明准备施展自己的一个神秘法术来求雨。
这个法术需要用到他手中的 49 张法术符,上面分别写着 1 至 49 这 49 个数字。法术一共持续 7 周,每天小明都要使用一张法术符,法术符不能重复使用。
每周,小明施展法术产生的能量为这周 7 张法术符上数字的中位数。法术施展完 7 周后,求雨将获得成功,降雨量为 7 周能量的中位数。
由于干旱太久,小明希望这次求雨的降雨量尽可能大,请问最大值是多少?
【答案提交】

这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。
【输入】

没有输入。
【输出】

输出一个整数
【提示】

把答案放在输出语句中输出,例如C/C++语言可以用printf或cout。

思路

emmm在这之前我想要吐槽一下我自己,真的愚蠢…居然想到了用全排列来做…还写出了代码…一边写一边自言自语说这样肯定运行不起,结果就是运行不起。后来也没想到好思路。不过拿纸和笔画了一下,就解决了,看来还是找规律更容易些。如下图:

在这里插入图片描述
也就是中位数后面的几个数肯定要比中位数大,进而可以看出来最少有15个数比我们要求的数大,因此49-15=34就是我们要求的最大降雨量。

答案:34

更新!!
看到了别个的思路,感觉比我的清晰,占为己有!hhhh
如下:
每周7天,中位数位为第四天,所以我们要使后四天尽量大所以
第一次我们取后四天为(46~49),第四天为:46
第二次我们取后四天为(42~45),第四天为:42
第三次我们取后四天为(38~41),第四天为:41
第四次我们取后四天为(34~37),第四天为:37
第五次我们取后四天为(30~33),第四天为:33
第六次我们取后四天为(26~29),第四天为:29
第七次我们取后四天为(22~25),第四天为:25
所以最大降雨量为:(46+42+38+34+30+26+22)/7=34
(来自简书)

下面附上我运行不出来的代码:
用全排列写的,我觉得理论上是可行的,运行不出来可能是运运行崩了,毕竟49个数的全排列有8789267254022766592种…可能。当然,这只是我自己的想法,注释里面有思路,**如果有错误,欢迎小伙伴们指正!!!**ovo

#include <stdio.h>
#include <algorithm>
#include <math.h>
using namespace std;

int maxyu = 0;  //最大降雨量,用来更新 
void process(int *a)
{
	int i,j,x;
	int c[7];//7周的能量 
	int yu;//下雨量 
	int b[7][7];  //7周7天 ,数组元素值代表当天的法术符 
	int n=0;  //标记数组位置 
	for(i=0;i<7;i++) //将全排列生成的a数组放进b这个2维数组,b代表7周 
	{
		for(j=0;j<7;j++)
		{
			b[i][j]=a[n++]; 
		}
	}
	for(i=0;i<7;i++)//对每周的排序,以方便选出中位数 
	{
		sort(b[i],b[i]+7);
	}
	for(i=0;i<7;i++) //将每周的能量(中位数)放进c数组 
	{
		c[i]=b[x][3];
	}
	sort(c,c+7); //对七周能量排序 
	yu = c[3]; //找出七周能量的中位数 
	if(yu>maxyu)  //找出最大的降雨量 
		maxyu=yu;
} 
 
int main ()
{
	int a[49];
	int n=49;
	int i;
	for(i=0;i<49;i++) //获取数组a,数组元素为 1-49  
		a[i]=i+1;
	
	do //生成全排列 
	{
		process(a);
	}while(next_permutation(a,a+n));
	printf("%d",maxyu);
	return 0;
}
  • 18
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值