一,獎券數目
標簽: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組省賽,Fill-in-the-blank question description This question is a fill-in-the-blank question,只需要算出結果後,在代碼中使用輸出語句將所填結果輸出即可.
在 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->datetimelibrary solution:
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];
}
三,三羊獻瑞
Question Description This question is a fill-in-the-blank question,只需要算出結果後,在代碼中使用輸出語句將所填結果輸出即可.
觀察下面的加法算式:
祥 瑞 生 輝
+ 三 羊 獻 瑞
-------------------
三 羊 生 瑞 氣
copy其中,相同的漢字代表相同的數字,不同的漢字代表不同的數字.
請你輸出“三羊獻瑞”所代表的 44 位數字(答案唯一).
運行限制 最大運行時間:1s 最大運行內存: 128Mpython解法(Enumerating brute force takes a minute or so to run):
#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;
}