April Fools Contest 2017 题解

趁着上课无聊,来补一补……

A. Numbers Joke

直接oeis就好了:http://oeis.org/search?q=numbers+joke&language=english&go=Search

#include<bits/stdc++.h>
using namespace std;

long long p[]={ 4, 22, 27, 58, 85, 94, 121, 166, 202, 265, 274, 319, 346, 355, 378, 382, 391, 438, 454, 483, 517, 526, 535, 562, 576, 588, 627, 634, 636, 645, 648, 654, 663, 666, 690, 706, 728, 729, 762, 778, 825, 852, 861, 895, 913, 915, 922, 958, 985, 1086, 1111, 1165};

int main(){
    int n;
    cin>>n;
    cout<<p[n-1]<<endl;
}

B - Kids' Riddle

16进制中圈圈的个数。。。。

这TM谁猜得到(微笑)

#include<bits/stdc++.h>
using namespace std;


char getc(long long p){
    if(p==10)return 'A';
    if(p==11)return 'B';
    if(p==12)return 'C';
    if(p==13)return 'D';
    if(p==14)return 'E';
    if(p==15)return 'F';
    return char(p+'0');
}
string get(long long x){
    string s;
    while(x){
        s+=getc(x%16);
        x/=16;
    }
    return s;
}
map<char,int> H;
int main(){
    H['0']=1;
    H['1']=0;
    H['2']=0;
    H['3']=0;
    H['4']=1;
    H['5']=0;
    H['6']=1;
    H['7']=0;
    H['8']=2;
    H['9']=1;
    H['A']=1;
    H['B']=2;
    H['C']=0;
    H['D']=1;
    H['E']=0;
    H['F']=0;
    long long p;
    cin>>p;
    if(p==0){
        cout<<"1"<<endl;
        return 0;
    }
    string s = get(p);
    int ans = 0;
    for(int i=0;i<s.size();i++)
        ans+=H[s[i]];
    cout<<ans<<endl;
}

C. INTERCALC

FIND XOR OF LARGEST AND LAST ARRAY ELEMENTS

#include<bits/stdc++.h>
using namespace std;
int n,x,mx;
int main(){
    scanf("%d",&n);
    for(int i=0;i<n;i++){
        scanf("%d",&x);
        mx=max(x,mx);
    }
    cout<<(x^mx)<<endl;
}

D - Touchy-Feely Palindromes

给你个字符串,问你这个字符串在盲文的条件下,是否回文

#include<bits/stdc++.h>
using namespace std;

map<char,char>H;
string s;
int main(){
    H['3']='3';
    H['4']='6';
    H['5']='9';
    H['6']='4';
    H['7']='7';
    H['8']='0';
    H['9']='5';
    H['0']='8';

    cin>>s;
    int flag = 1;
    for(int i=0;i<s.size();i++){
        if(!H.count(s[i]))flag=0;
        else{
            if(H[s[i]]!=s[s.size()-1-i])
                flag=0;
        }
    }
    if(flag)cout<<"Yes"<<endl;
    else cout<<"No"<<endl;
}

E - Twisted Circuit

给一个电路图,然后把OR门看成XOR门,把XOR门看成OR门就好了

#include<bits/stdc++.h>
using namespace std;

int main(){
    int a,b,c,d;
    cin>>a>>b>>c>>d;
    int a1=a^b;
    int b1=c|d;
    int c1=b&c;
    int d1=a^d;
    int a2=a1&b1;
    int b2=c1|d1;
    cout<<(a2^b2)<<endl;
}

F - Crunching Numbers Just for You

必须运行超过1秒。。

#include<bits/stdc++.h>
using namespace std;
const int maxn = 1000006;
int n,a[maxn];
int main(){
    scanf("%d",&n);
    for(int i=0;i<n;i++){
        scanf("%d",&a[i]);
    }
    for(int i=n;i<maxn;i++){
        a[i]=101;
    }
    for(int i=0;i<100;i++){
        a[n+i]=102+i;
        sort(a,a+maxn);
    }
    for(int i=0;i<n;i++)
        cout<<a[i]<<" ";
    cout<<endl;
}

G. BF Calculator

写一个表达式,让你用brainfuck写出答案是多少。

#include<bits/stdc++.h>
using namespace std;

string s;
string get(int p){
    if(p==0){
        return "0";
    }
    int flag = 0;
    if(p<0)flag=1,p=-p;
    string tmp;
    while(p){
        tmp+=(p%10+'0');
        p/=10;
    }
    if(flag)tmp+='-';
    reverse(tmp.begin(),tmp.end());
    return tmp;
}
int main(){
    cin>>s;
    int now = 0;
    int num = 0;
    int flag = 0;
    for(int i=0;i<s.size();i++){
        if(s[i]=='+'||s[i]=='-'){
            if(flag==0){
                now+=num;
            }
            else{
                now-=num;
            }
            if(s[i]=='+')
                flag=0;
            else
                flag=1;
            num=0;
        }else{
            num=num*10+(s[i]-'0');
        }
    }
    if(flag==0){
        now+=num;
    }
    else{
        now-=num;
    }
    string ss = get(now); 
    for(int i=0;i<ss.size();i++){
        for(int j=0;j<ss[i];j++){
            cout<<"+";
        }
        cout<<".";
        cout<<">"<<endl;
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值