程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式師世界 >> 編程語言 >  >> 更多編程語言 >> Python

[Lanqiao Cup C++ and Python daily practice] Daily brushing day1: the number of lottery tickets, galaxy bombs, and Sanyang Xianrui.

編輯:Python

一,獎券數目

標簽: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<<&quot;-&quot;<<month<<&quot;-&quot;<<day<<endl;
 //cout<<pmonth[1];


}

三,三羊獻瑞

Question Description This question is a fill-in-the-blank question,只需要算出結果後,在代碼中使用輸出語句將所填結果輸出即可.
觀察下面的加法算式:
 祥 瑞 生 輝
 + 三 羊 獻 瑞
-------------------
 三 羊 生 瑞 氣

copy其中,相同的漢字代表相同的數字,不同的漢字代表不同的數字.
請你輸出“三羊獻瑞”所代表的 44 位數字(答案唯一).
運行限制 最大運行時間:1s 最大運行內存: 128M
python解法(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(&quot;%d%d%d%d\n&quot;, 1, 0, g, b);

 }
 }
 }
 }
 }
 return 0;
}


  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式師世界 All Rights Reserved