本文共 1698 字,大约阅读时间需要 5 分钟。
由于沙之国长年干旱,法师小明准备施展自己的一个神秘法术来求雨。
这个法术需要用到他手中的 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#include #include 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;}
转载地址:http://xsrzi.baihongyu.com/