2021-02-22

2013年C++组1

题目1

英国数学家维纳智力早熟,11岁就上了大学,他曾在1935~1936年应邀来到中国清华大学讲学,一次,他参加某个重要的会议,年强的面孔吸引人的注意,于是有人询问他的年两,他回答道说:“我年龄的立方是一个4位数,我年龄的4次方是一个6位数。这10个数字正好包含了从0-9这十个数字,每个数字又恰好出现,请你推算一下他当时多少岁

解析

由于这个题看似复杂,需要;条件化后判断0-9十个数字是否依次出现,我第一次做的时候选择建立一个数组,利用取模依次对数组进行更新,如果出现重复的(即数组大于1)就跳出循环进行下一个判断,由于过程过于复杂繁琐,我们可以这样分析:
由于年龄问题不会超过100,而且年轻所以我们可以猜测10~30岁之间,于是我们只需要进行一个for循环,循环控制在10-30之间,依次输出所有满足的年龄,人为的判断出是多少岁,直接输出

代码:

#include <iostream>

using namespace std;

int main()
{  int i,i1,i2;

  for(i=10;i<30;i++)
  {  i1=i*i*i;
    i2=i1*i;
    if(i1>=1000&&i1<10000&&i2>=100000&&i2<1000000)
        cout<<i<<" "<<i1<<" "<<i2<<endl;
  }
    return 0;
}

在这里插入图片描述
只有18满足条件
于是

#include <iostream>

using namespace std;

int main()
{  int i,i1,i2;

 cout<<18;
    return 0;
}

是有点不太好,但是的确可以AC

习题2

题目

小茗同学上课的时候粗心将老师黑板上的36495抄成了39645
但是结果对的
问有多少种情况
满足abcde=adbce
要求乘法交换后算不同种

解析

没啥好说的就是五重循环暴力枚举

代码

#include <iostream>

using namespace std;

int main()
{  int i,i1=0;
for(i=1;i<10;++i)
  for(int j=1;j<10;++j)
     if(j!=i)
       for(int k=1;k<10;++k)
         if(k!=j&&k!=i)
           for(int l=1;l<10;++l)
              if(l!=k&&l!=j&&l!=i)
                 for(int m=1;m<10;++m)
                    if(l!=m&&m!=k&&m!=j&&m!=i)
                    if((i*10+j)*(k*100+l*10+m)==(k*10+m)*(i*100+l*10+j))
                                 i1++;

   cout<<i1<<endl;                                  return 0;
}

在这里插入图片描述

第一届蓝桥杯

第一题:仓库布局

问题描述

小明管理着一个仓库,他要在仓库里摆放一些货柜。货柜比较高,不能上下堆叠,底面是正方形,有一个侧面为正面,用于取放货物。
小明将仓库划分成了n x m的方格,其中南北方向n格,东西方向m格。每.个方格可能放置一个货柜,也可能作为过道。为了使仓库整齐有条理,小明的货柜的正面都朝南或朝北。具体的,从北向南第一行货柜朝南,第二行全部为过道,第三行货柜朝北,第四行货柜朝南,第五行全部为过道,第六行货柜朝北,第七行货柜朝南,第八行全部为过道,依次类推。如果第n行为朝南的货北,第七行货柜朝南,第八行全部为过道,依次类推。如果第n行为朝南的货柜,则由于无法取放货柜中的货物,只能将这排货柜撤除,此时第n行改为过道。
小明不仅有东西方向的过道,还有南北方向的过道,他每隔连续的5格都分出了一个南北方向的过道,即从西向东第6、12、 18列都是过道。
小明不仅有东西方向的过道,还有南北方向的过道,他每隔连续的5格都分出了一个南北方向的过道,即从西向东第6、12、 18列都是过道。
依照以上规则,当n=6、m=8时,仓库的摆放图如下:
在这里插入图片描述

#include <iostream>
#include <bits/stdc++.h>
using namespace std;

int main()
{   int n,m,sum=0;
    int i,j,l=0;
    int a[100][100];
    scanf("%d %d",&n,&m);
    for(i=0;i<=n;i++)
    {
        for(j=0;j<=m;j++)
        {
            a[i][j]=0;
        }
    }

   for(i=1;i<=m;i++)
   {
       a[1][i]=1;

   }
   int flag=0;
   sum=i-1;
  for(i=2;i<=n;i++)
{
    if(flag!=0)
    {    l++;
        for(j=1;j<=m;j++)
     {
         a[i][j]=1;
         sum++;

     }
     if(flag==2)
     {
         flag=-1;
     }
    }
 flag++;

    }

    

   l=l+1;m=m/5;
   l=l*m;

    sum=sum-l;
    printf("%d",sum);
    return 0;
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值