第十屆藍橋杯大賽軟件賽省賽C/C++ 大學 B 組
183.完全二叉樹的權值(找規律,臨界值)
#include?<bits/stdc++.h>
using?namespace?std;
int?a[1000005];
int?main()
{
??int?m;int?d;
??cin>>m;
??int?sum;int?maxn=0;
??for(int?i=1;i<=m;i++)
??{
????cin>>a[i];
??}
??for(int?i=1;pow(2,i-1)<=m;i++)
??{
????sum=0;
????for(int?j=pow(2,i-1);j<pow(2,i)&&j<=m;j++)
????{
??????sum+=a[j];
????}
????if(sum>maxn)
????{
??????maxn=sum;
??????d=i;
????}
??}
??cout<<d;
??return?0;
}
1.組隊(√)
2.年號字串(√)
(可理解為十進制轉二十六進制)
#include <stdio.h>
void calc(int a) {
? ? if (a > 26)
? ? ? ? calc(a / 26);
? ? printf("%c", 'A' + (a % 26) - 1);
}
int main() {
? ? calc(2019);
? ? return 0;
}
3.數列求值
#include?<iostream>
using?namespace?std;
#define?int?long?long
signed?main()
{
??int?a=1,b=1,c=1,d;
??for(int?i=4;i<=20190324;i++)
??{
????d=(a+b+c)%10000;
????a=b;
??b=c;
??c=d;
??}
??cout<<d;
??return?0;
}
4.數的分解
#include?<iostream>
using?namespace?std;
bool?jugde(int?num)
{
??while(num)
??{
????if(num%10==4||num%10==2)
????{
??????return?false;
????}
????num/=10;
??}
??return?true;
}
int?main()
{
??int?ans=0;
??for(int?i=1;i<2019;i++)
??{
????for(int?j=i+1;j<2019;j++)
????{
??????int?k=2019-i-j;
??????if(jugde(i)&&jugde(j)&&jugde(k)&&i<j&&j<k)
??????{
????????ans++;
??????}
????}
??}
??cout<<ans;
??return?0;
}
5.特別數的和
#include?<bits/stdc++.h>
using?namespace?std;
bool?temp(int?a)
{
??while?(a)
??{
????int?x=a%10;
????if(x==2||(x==0&&a>=10)||x==1||x==9)
????{
??????return?true;
????}
????a/=10;
??}
??return?false;
}
int?main()
{
??int?n;
??cin>>n;
??int?ans=0;
??for(int?i=1;i<=n;i++)
??{
????if(temp(i))
????{
??????ans+=i;
????}
??}
??cout<<ans;
??return?0;
}
6.完全二叉樹的權值
#include?<bits/stdc++.h>
using?namespace?std;
int?a[1000005];
int?main()
{
??int?m;int?d;
??cin>>m;
??int?sum;int?maxn=0;
??for(int?i=1;i<=m;i++)
??{
????cin>>a[i];
??}
??for(int?i=1;pow(2,i-1)<=m;i++)
??{
????sum=0;
????for(int?j=pow(2,i-1);j<