蓝桥杯官网上的蓝桥杯 历届试题 邮局是国赛题吗

帮忙求两道蓝桥杯比赛中的组合数学的题目,谢谢
[问题点数:40分,结帖人sr]
帮忙求两道蓝桥杯比赛中的组合数学的题目,谢谢
[问题点数:40分,结帖人sr]
不显示删除回复
显示所有回复
显示星级回复
显示得分回复
只显示楼主
2016年2月 C/C++大版内专家分月排行榜第三2016年1月 C/C++大版内专家分月排行榜第三
匿名用户不能发表回复!|
每天回帖即可获得10分可用分!小技巧:
你还可以输入10000个字符
(Ctrl+Enter)
请遵守CSDN,不得违反国家法律法规。
转载文章请注明出自“CSDN(www.csdn.net)”。如是商业用途请联系原作者。如果您查看本文后有所收获,欢迎您永久收藏到自己的账号中,同时也欢迎您分享给您的朋友
(Ctrl+Enter提交) &&
已有0人在此发表见解
&在& 01:08收藏到了
版权所有,转载本站文章还请保留本站文章或作者地址。 &&
· 蜀ICP备号-1
点击名称选择存放文件夹24406人阅读
C++(166)
蓝桥杯真题
1.问题描述:奖券数目
有些人很迷信数字,比如带“4”的数字,认为和“死”谐音,就觉得不吉利。
虽然这些说法纯属无稽之谈,但有时还要迎合大众的需求。某抽奖活动的奖券号码是5位数(),
要求其中不要出现带“4”的号码,主办单位请你计算一下,如果任何两张奖券不重号,最多可发出奖券多少张。
请提交该数字(一个整数),不要写任何多余的内容或说明性文字。
思路:5重循环,第一重为1-9,其余为0-9(这样就可以遍历1之间的全部数字),并且判断条件为每一个变量都不能为4。
结果:52488
#include &iostream&
int main()
int a,b,c,d,e;
int count1=0;
for(a=1;a&=9;a++)
for(b=0;b&=9;b++)
for(c=0;c&=9;c++)
for(d=0;d&=9;d++)
for(e=0;e&=9;e++)
if(a!=4&&b!=4&&c!=4&&e!=4&&d!=4)
cout&&count1&&
2.问题描述:星系炸弹
在X星系的广袤空间中漂浮着许多X星人造“炸弹”,用来作为宇宙中的路标。
每个炸弹都可以设定多少天之后爆炸。
比如:阿尔法炸弹日放置,定时为15天,则它在日爆炸。
有一个贝塔炸弹,日放置,定时为1000天,请你计算它爆炸的准确日期。
请填写该日期,格式为 yyyy-mm-dd &即4位年份2位月份2位日期。比如:
请严格按照格式书写。不能出现其它文字或符号。
思路:此题,我没有编程,而是进行手算。已知当前日期为,定时为1000天,2015不是闰年,,日期为;2016年是闰年(能被4整除但不能被100整除),635-366=269,日期为;266不满一年,所以接下来按月做减法,11月30天,12月31天,1月31天,2月28天,3月31天,4月30天,5月31天,6月30天,7月31天,269-30-31-31-28-31-30-31-30=27,日期为;27-22=5,日期为;最后日期为。
3.问题描述:三羊献瑞
观察下面的加法算式:
& & & 祥 瑞 生 辉
& + & 三 羊 献 瑞
-------------------
& &三 羊 生 瑞 气
其中,相同的汉字代表相同的数字,不同的汉字代表不同的数字。
请你填写“三羊献瑞”所代表的4位数字(答案唯一),不要填写任何多余内容。
思路:看到此题,第一反应便是有多少个不同的字便用几重循环来控制,循环内的判断条件便是两个四位数的和等于一个五位数。
结果:1085
#include &iostream&
int main(int argc, char *argv[])
int a,b,c,d,e,f,g,h;//分别代表:祥,瑞,生,辉,三,羊,献,气
int sum1=0,sum2=0,sum=0;//分表代表: 祥 瑞 生 辉,三 羊 献 瑞, 三 羊 生 瑞 气
for(a=1;a&=9;a++)//从1开始,因为数字首位不能为0
for(b=0;b&=9;b++)
for(c=0;c&=9;c++)
for(d=0;d&=9;d++)
for(e=1;e&=9;e++)//从1开始,因为数字首位不能为0
for(f=0;f&=9;f++)
for(g=0;g&=9;g++)
for(h=0;h&=9;h++)
if(a!=b&&a!=c&&a!=d&&a!=e&&a!=f&&a!=g&&a!=h
&& b!=c&&b!=d&&b!=e&&b!=f&&b!=g&&b!=h &&
c!=d&&c!=e&&c!=f&&c!=g&&c!=h && d!=e&&d!=f
&&d!=g&&d!=h && e!=f&&e!=g&&e!=h && f!=g&&f!=h
sum1=a*1000 + b*100 + c*10 +
sum2=e*1000 + f*100 + g*10 +
sum = e*10000 + f*1000 + c*100 + b*10 +
if(sum1+sum2 == sum)
cout&&e&&f&&g&&b;
5.问题描述:九数组分数
1,2,3...9 这九个数字组成一个分数,其值恰好为1/3,如何组法?
下面的程序实现了该功能,请填写划线部分缺失的代码。
#include &stdio.h&
void test(int x[])
int a = x[0]*1000 + x[1]*100 + x[2]*10 + x[3];
int b = x[4]*10000 + x[5]*1000 + x[6]*100 + x[7]*10 + x[8];
if(a*3==b) printf(&%d / %d\n&, a, b);
void f(int x[], int k)
for(i=k; i&9; i++){
{t=x[k]; x[k]=x[i]; x[i]=t;}
f(x,k+1);
_____________________________________________ // 填空处
int main()
int x[] = {1,2,3,4,5,6,7,8,9};
注意:只填写缺少的内容,不要书写任何题面已有代码或说明性文字。
思路:此题,请原谅我是蒙的,没想到对了。
结果:{t=x[k]; x[k]=x[i]; x[i]=t;}
6.问题描述:加法变乘法
我们都知道:1+2+3+ ... + 49 = 1225
现在要求你把其中两个不相邻的加号变成乘号,使得结果为2015
1+2+3+...+10*11+12+...+27*28+29+...+49 = 2015
就是符合要求的答案。
请你寻找另外一个可能的答案,并把位置靠前的那个乘号左边的数字提交(对于示例,就是提交10)。
注意:需要你提交的是一个整数,不要填写任何多余的内容。
思路:首先将1-49的和分为5部分,sum1,pro1,sum2,pro2,sum3,sum代表和,pro代表乘积。sum1就有3种情况:i*2;2*3;3*4,所以sum1=0;sum1=1;sum1=(1+2)*2/2=3。pro1永远只有一种情况,就是pro1=i*(i+1)。sum2也有三种情况,j-i=2(即两个*之间只有一个+);j-i=3(即两个*之间有2个+);j-i&3(即两个*之间有&2个+),所以sum2=0;sum2=j-1,;sum2=(i+j+1)*(j-i-2)/2。pro2永远只有一种情况,便是j*(j+1)。sum3我便没有考虑,默认后面的项数永远&2,sum3=(j+51)*(48-j)/2。(其实sum3也可以分为,当最后没有项,只有1项,&1项;则sum3=0,;sum3=49;sum3=(j+51)*(48-j)/2)用i和j控制两重循环。
结果:16 &(共两种情况10,27;16,24)
#include &iostream&
int main()
int i=0,j=0;
int sum1=0,sum2=0,sum3=0;
int pro1,pro2;
for(i=1;i&=46;i++)//此处i的最大值应为46,但是到到48也没错误
if(i!=1 && i!=2)
sum1=i*(i-1)/2;//sum1 = (1+i-1)*(i-1-1+1)/2;
pro1 = i*(i+1);
for(j=i+2;j&=48;j++)//因为是两个不相邻的+号改为*号,所以j最近也要从i+2算起
if(j-i&=2)
pro2=j*(j+1);
sum3=(j+51)*(48-j)/2;//sum3=(j+2+49)*(49-j-2+1)/2;
else if(j-i==3)
pro2=j*(j+1);
sum3=(j+51)*(49-j)/2;//sum3=(j+2+49)*(49-j-2+1)/2;
sum2=(i+j+1)*(j-i-2)/2;//sum2=(i+2+j-1)*(j-1-i-2+1)/2;
pro2=j*(j+1);
sum3=(j+51)*(48-j)/2;//sum3=(j+2+49)*(49-j-2+1)/2;
if(sum1 + pro1 + sum2 + pro2 + sum3 == 2015)
cout&&i && & &&&j&&
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:419809次
积分:5837
积分:5837
排名:第2597名
原创:183篇
评论:60条
(1)(2)(10)(1)(5)(88)(75)(1)2013年蓝桥杯试题解析(一) - 推酷
2013年蓝桥杯试题解析(一)
& & & 美国数学家维纳(N.Wiener)智力早熟,11岁就上了大学。他曾在年应邀来中国清华大学讲学。
& 一次,他参加某个重要会议,年轻的脸孔引人注目。于是有人询问他的年龄,他回答说:
&“我年龄的立方是个4位数。我年龄的4次方是个6位数。这10个数字正好包含了从0到9这10个数字,每个都恰好出现1次。”
&请你推算一下,他当时到底有多年轻。
public class GuessYear {
* 判断两个数组中的数字是否有相同的
* @param x
* @param y
boolean isEqual(long[] x,long[] y){
boolean flag =
int len = x.
int len1 = y.
//判断两个数组间是否有相同的数字
for(int i = 0; i & i++){
for(int j = 0; j & len1; j++){
if(x[i] == y[j])
//判断第一个数组内是否有相同的数字
for(int i = 0; i & i++){
long tmp = x[i];
for(int j = i+1; j & j++){
if(tmp == x[j])
//判断第二个数组内是否有相同的数字
for(int i = 0; i & len1; i++){
long tmp = y[i];
for(int j = i+1; j & len1; j++){
if(tmp == y[j])
* 判断某数字是几位数
* @param tmp
boolean isWhatBit(long num,int bit){
int count = 0;
while(num != 0){
num /= 10;
if( count == bit)
* 将数字分离到数组中
* @param a
* @param x
void splitNumber(long num,long []x){
int i = x.length - 1;
while(num != 0){
x[i--] = num % 10;
num /= 10;
void guess(){
long x[] = new long[4];
long y[] = new long[6];
row = col = 10;
for(long i = 1; i & i++){
for(long j = 0; j & j++){
long tmp = i*10+j;
long f = tmp*tmp*
long s = f*
if(!isWhatBit(f,4))
if(!isWhatBit(s,6))
splitNumber(f,x);
splitNumber(s,y);
if(!isEqual(x,y))
System.out.println(tmp);
& & 素数就是不能再进行等分的数。比如:2 3 5 7 11 等。
& & 9 = 3 * 3 说明它可以3等分,因而不是素数。
& &我们国家在1949年建国。如果只给你 1 9 4 9 这4个数字卡片,可以随意摆放它们的先后顺序(但卡片不能倒着摆放啊,我们不是在脑筋急转弯!),那么,你能组成多少个4 & &位的素数呢?
& &比如: 都符合要求。
& &请你提交:能组成的4位素数的个数,不要罗列这些素数!!
public class FourWeiPrime {
boolean isPrime(int n){
boolean flag =
for(int i = 2; i*i &= i++){
if(n % i == 0)
void prime(){
int init = 1000;
int ln = 0;
int count = 0;
for(int i = i & i++){
if(isPrime(i)){
System.out.print(&&+i+&,&);
if(ln &= 10){
System.out.println(&&);
System.out.println(&四位素数有:&+count+&个&);
答案:1061
转载请标明出处:
3.马虎的算式
& &小明是个急性子,上小学的时候经常把老师写在黑板上的题目抄错了。
& &有一次,老师出的题目是:36 x 495 = ?
& &他却给抄成了:396 x 45 = ?
& &但结果却很戏剧性,他的答案竟然是对的!!
& &因为 36 * 495 = 396 * 45 = 17820
& &类似这样的巧合情况可能还有很多,比如:27 * 594 = 297 * 54
& &假设 a b c d e 代表1~9不同的5个数字(注意是各不相同的数字,且不含0)
& 能满足形如: ab * cde = adb * ce 这样的算式一共有多少种呢?
& 请你利用计算机的优势寻找所有的可能,并回答不同算式的种类数。
& 满足乘法交换律的算式计为不同的种类,所以答案肯定是个偶数。
public class Mahu {
void mahu(){
int MAX = 9;
int count = 0;
int num1 = 0;
int num2 = 0;
int num3 = 0;
int num4 = 0;
for(int a = 1; a &= MAX; a++){
for(int b = 1; b &= MAX; b++){
if(a == b)
for(int c = 1; c &= MAX; c++){
if(a == c || b == c)
for(int d = 1; d &= MAX; d++){
if(a == d || b == d || c == d)
for(int e = 1; e &= MAX; e++){
if(a == e || b == e || c == e || d == e)
num1 = a*10+b;
num2 = c*100+d*10+e;
num3 = a*100+d*10+b;
num4 = c*10+e;
// System.out.println(a+&,&+b+&,&+c+&,&+d+&,&+e);
if(num1*num2 == num3*num4){
System.out.println(&&+a+b+&*&+c+d+e);
System.out.println(&总数:&+count);
4.第39级台阶
& & 小明刚刚看完电影《第39级台阶》,离开电影院的时候,他数了数礼堂前的台阶数,恰好是39级!
& & 站在台阶前,他突然又想着一个问题:
& & 如果我每一步只能迈上1个或2个台阶。先迈左脚,然后左右交替,最后一步是迈右脚,也就是说一共要走偶数步。那么,上完39级台阶,有多少种不同的上法呢?
& &请你利用计算机的优势,帮助小明寻找答案。
& &要求提交的是一个整数。
public class Plant39 {
void plant(){
int MAX = 39;
int sum = 0;
int count = 0;
for(m = 1; m &= MAX; m++){
for(n = 1; n &= MAX; n++){
int tmp = m + n*2;
if(tmp == 39 && sum % 2 == 0){
System.out.println(m+&,&+n+&&);
System.out.println(&共有&+count+&种&);
5.有理数类
& & 有理数就是可以表示为两个整数的比值的数字。一般情况下,我们用近似的小数表示。但有些时候,不允许出现误差,必须用两个整数来表示一个有理数。
& & 这时,我们可以建立一个“有理数类”,下面的代码初步实现了这个目标。为了简明,它只提供了加法和乘法运算。
class Rational
private long gcd(long a, long b){
return gcd(b,a%b);
public Rational(long a, long b){
long k = gcd(ra,rb);
if(k&1){ //需要约分
public Rational add(Rational x){
return _____________________; &//填空位置
public Rational mul(Rational x){
return new Rational(ra*x.ra, rb*x.rb);
public String toString(){
if(rb==1) return && +
return ra + &/& +
使用该类的示例:
Rational a = new Rational(1,3);
Rational b = new Rational(1,6);
Rational c = a.add(b);
System.out.println(a + &+& + b + &=& + c);
答案:new Rational(ra*x.rb+rb*x.ra,rb*x.rb)
转载请标明出处:
已发表评论数()
已收藏到推刊!
请填写推刊名
描述不能大于100个字符!
权限设置: 公开
仅自己可见
正文不准确
标题不准确
排版有问题
没有分页内容
图片无法显示
视频无法显示
与原文不一致

我要回帖

更多关于 蓝桥杯历届试题 的文章

 

随机推荐