????????????
????????????Hello,大家好我是上进小菜猪,一个有趣的全栈博主,欢迎关注,多多关照
????????????欢迎大家找我合作学习(文末有VX与公众号 想进学习交流群or学习资料or一起刷题 欢迎++)
????????????苟怀四方志,所在可游盘,一起加油进步!????????????
????????????
一,奖券数目
标签:2015,B组省赛,填空题
题目描述
本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。
有些人很迷信数字,比如带 “4”“4” 的数字,认为和“死”谐音,就觉得不吉利。 虽然这些说法纯属无稽之谈,但有时还要迎合大众的需求。某抽奖活动的奖券号码是 55 位数(10000-9999910000−99999),要求其中不要出现带 “4”“4” 的号码。
主办单位请你计算一下,如果任何两张奖券不重号,最多可发出奖券多少张。
运行限制 最大运行时间:1s 最大运行内存: 128M
答案:
52488
python解法:
cout=0
for a in range(10000,99999+1):
u=str(a)
flag=1
for i in range(5):
if u[i]=='4':
flag=0
if flag==1:
cout=cout+1
print(cout)
c++解法:
#include<bits/stdc++.h>
using namespace std;
int main()
{
int a=10000,c;
int b[10];
int coutx=0;
for(int i=a;i<100000;i++)
{
c=i;
int j=0,m,flag=1;
while(c>0)
{
m=c%10;
b[j]=m;
j++;
c=c/10;
}
for(int p=0;p<5;p++)
{
if(b[p]==4)
{
flag=0;
}
}
if(flag==1)
{
coutx++;
}
}
cout<<coutx<<endl;
}
心得:python简单快速
二,星系炸弹
标签:2015,B组省赛,填空题
题目描述
本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。
在 X 星系的广袤空间中漂浮着许多X星人造“炸弹”,用来作为宇宙中的路标。 每个炸弹都可以设定多少天之后爆炸。
比如:阿尔法炸弹 20152015 年 11 月 1v 日放置,定时为1v日放置,定时为15天,则它在天,则它在2015年年1月月16$ 日爆炸。
有一个贝塔炸弹,20142014 年 1111 月 99 日放置,定时为 10001000 天,请你计算它爆炸的准确日期。
请输出该日期,格式为 yyyy-mm-ddyyyy−mm−dd 即 44 位年份 22 位月份 22 位日期。比如:2015-02-192015−02−19。
运行限制 最大运行时间:1s 最大运行内存: 128M
答案:
2017-08-05
python 普通解法:
pmonth=[31,28,31,30,31,30,31,31,30,31,30,31]
rmonth=[31,29,31,30,31,30,31,31,30,31,30,31]
year=2014
month=11
day=9
for a in range(1000):
#闰年
if((year%4==0 and year%100!=0) or (year%400 ==0) ):
if(day<rmonth[month-1]):
day=day+1
elif(day==rmonth[month-1]):
if(month<12):
day=1
month=month+1
else:
day=1
month=1
year=year+1
#平年
else:
if(day<pmonth[month-1]):
day=day+1
elif(day==pmonth[month-1]):
if(month<12):
day=1
month=month+1
else:
day=1
month=1
year=year+1
print(year,month,day)
Python->datetime库解法:
import datetime
yester = datetime.date(2014,11,9)
time = datetime.timedelta(days=1000)
today = yester + time
print(today)
c++解法:
#include<bits/stdc++.h>
using namespace std;
int main()
{
int pmonth[12]={31,28,31,30,31,30,31,31,30,31,30,31};
int rmonth[12]={31,29,31,30,31,30,31,31,30,31,30,31};
int year=2014,month=11,day=9;
for (int i=0;i<1000;i++)
{
//闰年
if((year%4==0&&year%100!=0) ||(year%400==0))
{
if(day<rmonth[month-1])
{
day++;
}
else if(day==rmonth[month-1])
{
if(month<12)
{
month++;
day=1;
}
else if(month==12)
{
day=1;
month=1;
year++;
}
}
}
//平年
else
{
if(day<pmonth[month-1])
{
day++;
}
else if(day==pmonth[month-1])
{
if(month<12)
{
day=1;
month++;
}
else if(month==12)
{
month=1;
year++;
day=1;
}
}
}
}
cout<<year<<"-"<<month<<"-"<<day<<endl;
//cout<<pmonth[1];
}
三,三羊献瑞
题目描述
本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。
观察下面的加法算式:
祥 瑞 生 辉
+ 三 羊 献 瑞
-------------------
三 羊 生 瑞 气
copy
其中,相同的汉字代表相同的数字,不同的汉字代表不同的数字。
请你输出“三羊献瑞”所代表的 44 位数字(答案唯一)。
运行限制 最大运行时间:1s 最大运行内存: 128M
python解法(枚举暴力需要跑一分钟左右):
#a祥 b瑞 c生 d辉 e三 f羊 g献 h气
for a in range(1,10):
for b in range(0,10):
for c in range(0,10):
for d in range(0,10):
for e in range(1,10):
for f in range(0,10):
for g in range(0,10):
for h in range(0,10):
x=a*1000+b*100+c*10+d
y=e*1000+f*100+g*10+b
z=e*10000+f*1000+c*100+b*10+h
if(x+y==z and a!=b and a!=c and a!=d and a!=e and a!=f and a!=g and a!=h and b!=c and b!=d and b!=e and b!=f and b!=g and b!=h and c!=d and c!=e and c!=f and c!=g and c!=h and d!=e and d!=f and d!=g and d!=h and e!=f and e!=g and e!=h and f!=g and f!=h and g!=h):
print(a,b,c,d,e,f,g,h)
python解法(使用itertools.permutations)快速方法:
import itertools
count=0
a=[i for i in range(10)]
x=itertools.permutations(a,8)
for i in x:
if ((i[0]*1000+i[1]*100+i[2]*10+i[3])+(i[4]*1000+i[5]*100+i[6]*10+i[1])==(i[4]*10000+i[5]*1000+i[2]*100+i[1]*10+i[7])and i[4]!=0):
print(i[4],i[5],i[6],i[1])
c++暴力枚举法:
#include <string>
using namespace std;
int main() {
for (int b = 2; b < 9; ++b) {
for (int d = 2; d < 9; ++d) {
if (b == d)
continue;
for (int g = 2; g < 9; ++g) {
if (g == b || g == d)
continue;
int c = b + 1;
if (c == b || c == d || c == g)
continue;
if (c + g <= 10)
continue;
int sum = 9000 + b * 100 + c * 10 + d + 1000 + g * 10 + b;
for (int i = 2; i < 9; ++i) {
if (i == b || i == d || i == g || i == c)
continue;
if (sum <= (10000 + c * 100 + b * 10 + i) && sum >= (10000 + c * 100 + b * 10 + i)) {
printf("%d%d%d%d\n", 1, 0, g, b);
}
}
}
}
}
return 0;
}
END
????????????关注作者,持续阅读作者的文章,一起学习更多知识!