2015蓝桥杯C/C++B组真题(1-5)

1.奖券数目

有些人很迷信数字,比如带“4”的数字,认为和“死”谐音,就觉得不吉利。
虽然这些说法纯属无稽之谈,但有时还要迎合大众的需求。某抽奖活动的奖券号码是5位数(10000-99999),要求其中不要出现带“4”的号码,主办单位请你计算一下,如果任何两张奖券不重号,最多可发出奖券多少张。
请提交该数字(一个整数),不要写任何多余的内容或说明性文字。

方法一
数学计算:8x9x9x9x9 = 52488

方法二
分解出号码的每一位,再来判断是否为4,只有这个数中的其中一个位数的数字为4,边记录下来,接着来判断下一个数。

#include <stdio.h>
int ans=0;
int main()
{
   
   
	int i;
	for(i=10000;i<100000;i++)
	{
   
   
		if(!(i/10000==4 || i%10000/1000==4 || i%1000/100==4 || i%100/10==4 || i%10==4))
		{
   
   
			ans++;
		}
	}
	printf("ans = %d\n",ans);
	return 0;
}

输出:52488

方法三:字符串

#include<iostream>
#include<sstream>
#include<string>
using namespace std;

void i2s(int num, string &str){
   
   
//stringstream 类的作用是将数字转换成字符串
        stringstream ss;
//将需要转换的数字 num 使用 << 运算符传递给 ss 对象 
        ss << num;
//将转换后的字符串使用 >> 运算符传递给 str 变量 
        ss >> str;
    }
    
int main(){
   
   
    int ans=0;
    for(int i=10000;i<=99999;i++){
   
   
        string s;
        i2s(i,s);
        
//查找字符串 s 中是否不包含(注意: 不包含用的是 ==)'4'这个字符串 
        if(s.find('4')==string::npos){
   
   
            ans++;
        }
    }
    cout<<ans<<endl;
    return 0;
}

string::npos参数
npos 是一个常数,用来表示不存在的位置,类型一般是std::container_type::size_type 许多容器都提供这个东西;取值由实现决定,一般是-1,这样做,就不会存在移植的问题。
find函数
find函数的返回值是整数,假如字符串存在包含关系,其返回值必定不等于npos,但如果字符串不存在包含关系;那么返回值就一定是npos,所以很容易想到用if判断语句来实现。
简单而言:如果存在包含关系find函数返回的就是主串与子串相匹配的下标,如果不存在包含关系就返回。
npos(一个常数,表示不存在)(s.find(“abcdefg”)==string::npos)

2.星系炸弹

在X星系的广袤空间中漂浮着许多X星人造“炸弹”,用来作为宇宙中的路标。
每个炸弹都可以设定多少天之后爆炸。
比如:阿尔法炸弹2015年1月1日放置,定时为15天,则它在2015年1月16日爆炸。
有一个贝塔炸弹,2014年11月9日放置,定时为1000天,请你计算它爆炸的准确日期。
请填写该日期,格式为 yyyy-mm-dd 即4位年份2位月份2位日期。比如:2015-02-19
请严格按照格式书写。不能出现其它文字或符号。

方法一:Excel 非常好用!
在这里插入图片描述
右键单元格–>设置单元格格式–>选日期,然后选星期
就知道那天是星期几了

方法二:

#include<iostream>
#include<bits/stdc++.h>
using namespace std;
int main(){
   
   
    int sum=1000;
    int Mdays[12]={
   
   31,28,31,30,31,30,31,31,30,31,30,31};
    int Y=2014;
    int M=11;
    int D=9;
    
//2014 年 11 月 09 日距离爆炸有 1000 天, 在此循环 1000 次
    for(int i=1;i<=sum;i
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值