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