【蓝桥杯】暴力枚举类型

猜年龄
美国数学家维纳(N.Wiener)智力早熟,11岁就上了大学。他曾在1935~1936年应邀来中国清华大学讲学。 一次,他参加某个重要会议,年轻的脸孔引人注目。于是有人询问他的年龄,他回答说:“我年龄的立方 是个4位数。我年龄的4次方是个6位数。这10个数字正好包含了从0到9这10个数字,每个都恰好出现1次。”请你推算一下,他当时到底有多年轻。直接提交他那时的年龄数字。
思路分析
由3次方为4位数可知年龄为10-30,遍历10-30
两种方法
1依次输出,观察找到满足题意的年龄
2用if条件判断

#include<bits/stdc++.h>
using namespace std;
int main()
{
    for(int i=10;i<=30;i++)
    {
        if(i*i*i>=1000&&i*i*i*i>=100000)
            cout<<i<<" "<<i*i*i<<"  "<<i*i*i*i<<endl;
    }
}

网友年龄
某君新认识一网友。当问及年龄时,他的网友说:“我的年龄是个2位数,我比儿子大27岁,
如果把我的年龄的两位数字交换位置,刚好就是我儿子的年龄”
请你计算:网友的年龄一共有多少种可能情况?
提示:30岁就是其中一种可能哦.
请填写表示可能情况的种数。
思路分析
直接暴力遍历,满足+1

#include<bits/stdc++.h>
using namespace std;
int main()
{
    int sum=0;
    for(int i=10;i<=99;i++)
    {
        int ge=i%10;
        int shi=i/10;
        if(i==ge*10+shi+27)
        {
            sum++;
            cout<<i<<endl;
        }
    }
    cout<<sum<<endl;
}

生日年龄数
某君从某年开始每年都举办一次生日party,并且每次都要吹熄与年龄相同根数的蜡烛。现在算起来,他一共吹熄了236根蜡烛。
请问,他从多少岁开始过生日party的?
请输出他开始过生日party的年龄数。
注意:你输出的应该是一个整数,不要输出任何多余的内容或说明性文字。
思路分析
i(0-100)岁开始生日,遍历,蜡烛总数累加,当刚好等于236时满足输出,大于则不满足,遍历到下一个开始岁数

#include<bits/stdc++.h>
using namespace std;
bool fun(int i)
{
    int sum=0;
    while(sum<236)
    {
        sum+=i;
        i++;
    }
    if(sum==236) return 1;
    else return 0;
}
int main()
{
    for(int i=0;i<=100;i++)
    {
        if(fun(i)) cout<<i;
    }
}

数学题
有限五位数
个位数为6且能被3整除的五位数有多少个?
思路分析
个位数10000-99999,个位为6则%10=6,能被3整除%3=0

#include<bits/stdc++.h>
using namespace std;
int main()
{
    int sum=0;
    for(long long i=10006;i<=99996;i++)
    {
        if(i%10==6&&i%3==0) sum++;
    }
    cout<<sum;
}

马虎的算式
小明是个急性子,上小学的时候经常把老师写在黑板上的题目抄错了。有一次,老师出的题目是:36 x 495 =? 他却给抄成了:396 x 45 = ? 但结果却很戏剧性,他的答案竟然是对的!! 因为 36 * 495 = 396 * 45= 1782 类似这样的巧合情况可能还有很多,比如:27* 594 = 297 * 54
假设 a b c d e 代表1~9不同的5个数字(注意是各不相同的数字,且不含0)
能满足形如: ab * cde = adb* ce 这样的算式一共有多少种呢?请你利用计算机的优势寻找所有的可能,并回答不同算式的种类数。
满足乘法交换律的算式计为不同的种类,所以答案肯定是个偶数。
答案直接通过浏览器提交。注意:只提交一个表示最终统计种类数的数字,不要提交解答过程或其它多余的内容。
思路分析
五个数,用五个循环遍历,满足五个数互不相等并且满足ab * cde = adb* ce,sum+1;

#include<bits/stdc++.h>
using namespace std;
bool fun(int a,int b,int c,int d,int e)
{
    if(a==b||a==c||a==d||a==e||b==c||b==d||b==e||c==d||c==e||d==e) return 0;
    if((a*10+b)*(c*100+d*10+e)!=(a*100+d*10+b)*(c*10+e)) return 0;
    return 1;
}
int main()
{
    int sum=0;
    for(int a=1;a<=9;a++)
        for(int b=1;b<=9;b++)
            for(int c=1;c<=9;c++)
                for(int d=1;d<=9;d++)
                    for(int e=1;e<=9;e++)
                        if(fun(a,b,c,d,e)) sum++;
    cout<<sum<<endl;
}

奇怪的分式
上小学的时候,小明经常自己发明新算法。一次,老师出的题目是: 1/4 乘以 8/5 小明居然把分子拼接在一起,分母拼接在一起,答案是:18/45。老师刚想批评他,转念一想,这个答案凑巧也对啊,真是见鬼!
对于分子、分母都是 1~9 中的一位数的情况,还有哪些算式可以这样计算呢? 请写出所有不同算式的个数(包括题中举例的)。
显然,交换分子分母后,例如:4/1 乘以 5/8 是满足要求的,这算做不同的算式。
但对于分子分母相同的情况,2/2 乘以 3/3 这样的类型太多了,不在计数之列!
注意:答案是个整数(考虑对称性,肯定是偶数)。
请通过浏览器提交。不要书写多余的内容。
思路分析
两个条件:1.不能两个都是分子分母相同的数,2.满足a/b * c/d=ac/bd,
注意:判断条件2时分子都要乘1.0,否则结果出错,或者用十字相乘法判断

#include<bitsdc++.h>
using namespace std;
int main()
{
    int sum=0;
    for(int a=1;a<=9;a++)
        for(int b=1;b<=9;b++)
            for(int c=1;c<=9;c++)
                for(int d=1;d<=9;d++)
                    if((1.0*a*c)/(b*d)==(1.0*a*10+c)/(b*10+d)&&(a!=b||c!=d))
                        sum++;
    cout<<sum<<endl;
}

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值