第一題
490
別看錯17號 一個頂三
第二題
BYQ
36進制
第三題
別用遞歸
答案 4659 如果不模10000,得到的結果千位是0,題目特意告訴千位不爲0
#include<iostream>
using namespace std;
long long dp[100000000];
int main()
{
long long a;
cin>>a;
dp[1]=1;
dp[2]=1;
dp[3]=1;
for(int i=4;i<=a;i++)
{
dp[i]=(dp[i-1]+dp[i-2]+dp[i-3])%10000;
}
cout<<dp[a]<<endl;
return 0;
}
第四題
暴力加優化
答案
//跑個10分鐘
#include<bits/stdc++.h>
using namespace std;
#define N 2019
void i2s(int a,string &s)
{
stringstream ss;
ss<<a;
ss>>s;
}
bool is(int a)
{
string s;
i2s(a,s);
if(s.find("2")==string::npos&&s.find("4")==string::npos) return false;
else return true;
}
int main()
{
int ans=0;
for(int i=1;i<N;i++) //還可以從奇偶來優化 考試的時候沒跑出來
{
if(is(i)) continue;
for(int j=i+1;j<N;j++)
{
if(is(j)) continue;
for(int k=j+1;k<N;k++)
{
if(is(k)) continue;
if(i+j+k==N)
{
ans++;
}
}
}
}
cout<<ans/6<<endl;//除以6
return 0;
}
第五題
BFS求解,眼睛都看瞎了
大題:
//求只含2 0 1 9數字的類似上面的string.find的即可,和用long long存儲
//求等差數列的,我的思路是用最大的數減去最小的數, 然後從大到小枚舉公差,此公差從第一項開始的倍數若滿足所給的所有數據,那麼就是使之最短數列的公差,除一下就知道最短多少個了,過了樣例(是不是要考慮公差爲0的情況,忘了)
//完全二叉樹那題,用數組求解即可 1 2 4 8。。。,開一個數組記錄每一層的值,此數組的下標即對應深度,最後將此數組倒着求解最大即可(倒着就可以在相同的情況下,找到深度最小的情況) //(ps:乍一看還想建樹層序遍歷呢)(有負數數據,max不能設置爲0,gg)
//求後綴表達式那題,先排序再將所有的負號個數乘以從第一個開始的數據即可,最後相加 。比如: 排序之後 爲 -10 -5 1 2 3 有 3個負號 一個正號,則爲 10 5 -1 2 3,相加即爲最大,全爲負數 如:-10 -9 -8 -7 -5 三個負號,一個正號也是一樣的 10 9 8 -7 -5 也爲最大(貌似沒說用括號吧)
//星際爭霸那題沒看,字太長了,感覺也不會
有錯誤歡迎指出