蓝桥杯2015初赛做题日记

2015蓝桥杯初赛 c++组

[蓝桥杯2015初赛]方程整数解

n的范围在1到1e4,暴力求解即可
按照abc依次从小到大输出,所以可以abc依次遍历即可,简单C语言题
代码如下:

#include <bits/stdc++.h>
using namespace std;
int n;
 
int main(){
      ios::sync_with_stdio(false);
 
     while(cin>>n)
     {    int a,b,c;
         int f=0;
         for(int i=1;i<sqrt(n);i++)
            for(int j=i;j<sqrt(n);j++)
                for(int k=j;k<sqrt(n);k++)
                   if(i*i+j*j+k*k==n)
                    {
                        f=1;
                        printf("%d %d %d\n",i,j,k);
                    }
                    if(f==0)
                        printf("No Solution\n");
     }
}

[蓝桥杯2015初赛]星系炸弹

一到简单的模拟题,注意闰年的处理即可

#include<iostream>
#include<cstdio>
#include<cstdlib>
using namespace std;
int main()
{
    int leap[2][13]={0,31,28,31,30,31,30,31,31,30,31,30,31,
                     0,31,29,31,30,31,30,31,31,30,31,30,31};
    int y,m,d;
    int n;
    while(scanf("%d %d %d %d",&y,&m,&d,&n)!=EOF){
            while(n){
                int t=((y%4==0&&y%100!=0)||(y%400==0));///判断闰年否
                n--;
                d++;
               if(d>leap[t][m])///进入下一个月
               {
                   m++;
                   d=1;
               }
               if(m==13)///进入下一年
               {
                   y++;
                   m=1;
               }
            }
            printf("%d-%02d-%02d\n",y,m,d);///答案的输出注意格式
    }
}

[蓝桥杯2015初赛]奇妙的数字

平方和立方正好把0到9的数都用过一次,也就是说,数的位数不可能超过三位数,那么,我们在1到1000 的范围里暴力就行了

#include<bits/stdc++.h>
 
using namespace std;
const int N=1e3;
int a[10];
int kk(){///判断0-9是否都出现过
    for(int i=0;i<10;i++)
    {
        if(a[i]!=1) return 0;
    }
    return 1;
}
int main()
{
 
    for(int i=1;i<N;i++)
    { memset(a,0,sizeof(a));
          int a1=i*i;
          int a2=i*i*i;
          while(a1>0){
              a[a1%10]++;
              a1=a1/10;
          }
          while(a2>0)
          {
               a[a2%10]++;
              a2=a2/10;
          }
          if(kk()) {printf("%d",i); break;}
 
    }
}

[蓝桥杯2015初赛]牌型种数

一道搜索题,首先牌的种类一共13种,每种最多4张,那么对每种牌的数量进行选取,最后可行的方案是每种牌的个数不超过4个,并且牌的种类不能超过13种,那么就可以了,我们进行13次搜索,每次对牌的个数进行从0到4的选取,代码如下:

#include<bits/stdc++.h>
 
using namespace std;
const int N=1e3;
int sum,ans;
void dfs(int k){///k代表的是选择的次数,选0也是选一次,最后一定要选满13次
     if(k>13||sum>13) return;
     if(sum==13&&k==13){ans++; return ;}
     for(int i=0;i<5;i++){
         sum+=i;
        dfs(k+1);
        sum-=i;
     }
}
int main()
{
    for(int i=0;i<5;i++)
    {
        sum+=i;
        dfs(1);
        sum-=i;
    }
    printf("%d",ans);
}
 

1254: [蓝桥杯2015初赛]手链样式

是一道字符串题,还是有一定难度的,需要会熟练的使用STL,首先就是题意的理解:
手链可以随意转动,也就是相当于1234和2341等等是一种组合,其次手链可以翻转,也就是说1234和1432和也是一种。
对于可以随意转动,我们复制字符串两段一样的拼成一段即可,对于可以翻转我们就用reverse函数把字符串翻转,再复制再拼成一段即可。然后所有出现过的情况用vector保存起来即可
对于如何遍历所有的情况,我们使用next_permutation即可
这道题,直接提交是会超时的,可是就这一组数据,且只要答案,那么直接提交输出答案的代码即可

#include<bits/stdc++.h>
using namespace std;
int main()
{
    int num=0;
    vector<string>vis;              //存已经计数过的玛瑙串
    string str = "aaabbbbccccc";//表示玛瑙串
    do
    {
        int has=0;
        for(int i=0; i<vis.size(); i++)
        {
            if(vis[i].find(str)!=string::npos)///没找到的话返回string::npos
            {
                has=1;
                break;
            }
        }
        if(has==0)///没找到则进行添加
        {
            num++;
            string tem=str;
            tem=tem+tem;
            vis.push_back(tem);
            reverse(tem.begin(),tem.end());
            vis.push_back(tem);
        }
    }
    while(next_permutation(str.begin(),str.end()));
    cout<<num<<endl;
}

1255: [蓝桥杯2015初赛]饮料换购

简单的模拟,三瓶换一瓶也就是每次会损失两瓶,这样操作一次会多喝一瓶,那么我们用n的值加上可以换购的次数即可

#include <iostream>
#include <cstring>
using namespace std;
int main(){
    int n;
    while(cin>>n){
    int ans=n;
    while(n>=3)
    {
        n-=2;
        ans++;
    }
    printf("%d\n",ans);
    }
}
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值