4.18今日头条编程题
发布于 2017-04-18 21:03 4405 次浏览 1 赞 来自 笔试面试  

1、map解决

2、set解决

3、大模拟,写了近300行,只要不手残一般能写出来吧~

4、不会做,先写了个搜索,然而超内存了,求教~~


1、

 #include<bits/stdc++.h>
using namespace std;
typedef long long LL;
map<int ,int > ma;
int main()
{
    int n,m;
    scanf("%d",&n);
    for(int i=0;i<n;i++)
    {
        int a;
        scanf("%d",&a);
        ma[a]++;
    }
    scanf("%d",&m);
    for(int i=0;i<m;i++)
    {
        int b;
        scanf("%d",&b);
        if(ma[b]==0)
        {

        }
        else
        {
            printf("%d ",b);
        }
    }
    return 0;
}

2、

 #include<bits/stdc++.h>
using namespace std;
typedef long long LL;
set<LL> s;
int main()
{
    LL a;
    while(cin>>a)
    {
        if(a==0)
        {
            break;
        }
        s.insert(a);
    }
    cout<<s.size()<<endl;
    return 0;
}

3、

#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
char s[1005];
char ans[100][100];
void work(char c,int x,int y)
{
    if(c=='0')
    {
        ans[x][y]=ans[x][y+1]=ans[x][y+2]='*';
        ans[x+1][y]='*';
        ans[x+1][y+2]='*';
        ans[x+2][y]='*';
        ans[x+2][y+2]='*';
        ans[x+3][y]='*';
        ans[x+3][y+2]='*';
        ans[x+4][y]=ans[x+4][y+1]=ans[x+4][y+2]='*';
    }
    else if(c=='1')
    {
        ans[x][y]='*';
        ans[x+1][y]='*';
        ans[x+2][y]='*';
        ans[x+3][y]='*';
        ans[x+4][y]='*';
    }
    else if(c=='2')
    {
        ans[x][y]=ans[x][y+1]=ans[x][y+2]='*';
        ans[x+1][y+2]='*';
        ans[x+2][y]='*';
        ans[x+2][y+1]='*';
        ans[x+2][y+2]='*';
        ans[x+3][y]='*';
        ans[x+4][y]=ans[x+4][y+1]=ans[x+4][y+2]='*';
    }
    else if(c=='3')
    {
        ans[x][y]=ans[x][y+1]=ans[x][y+2]='*';
        ans[x+1][y+2]='*';
        ans[x+2][y]='*';
        ans[x+2][y+1]='*';
        ans[x+2][y+2]='*';
        ans[x+3][y+2]='*';
        ans[x+4][y]=ans[x+4][y+1]=ans[x+4][y+2]='*';
    }
    else if(c=='4')
    {
        ans[x][y]=ans[x][y+2]='*';
        ans[x+1][y]='*';
        ans[x+1][y+2]='*';
        ans[x+2][y]='*';
        ans[x+2][y+1]='*';
        ans[x+2][y+2]='*';
        ans[x+3][y+2]='*';
        ans[x+4][y+2]='*';
    }
    else if(c=='5')
    {
        ans[x][y]=ans[x][y+1]=ans[x][y+2]='*';
        ans[x+1][y]='*';
        ans[x+2][y]='*';
        ans[x+2][y+1]='*';
        ans[x+2][y+2]='*';
        ans[x+3][y+2]='*';
        ans[x+4][y]=ans[x+4][y+1]=ans[x+4][y+2]='*';
    }
    else if(c=='6')
    {
        ans[x][y]=ans[x][y+1]=ans[x][y+2]='*';
        ans[x+1][y]='*';
        ans[x+2][y]='*';
        ans[x+2][y+1]='*';
        ans[x+2][y+2]='*';
        ans[x+3][y]='*';
        ans[x+3][y+2]='*';
        ans[x+4][y]=ans[x+4][y+1]=ans[x+4][y+2]='*';
    }
    else if(c=='7')
    {
        ans[x][y]=ans[x][y+1]=ans[x][y+2]='*';
        ans[x+1][y+2]='*';
        ans[x+2][y+2]='*';
        ans[x+3][y+2]='*';
        ans[x+4][y+2]='*';
    }
    else if(c=='8')
    {
        ans[x][y]=ans[x][y+1]=ans[x][y+2]='*';
        ans[x+1][y]='*';
        ans[x+1][y+2]='*';
        ans[x+2][y]='*';
        ans[x+2][y+1]='*';
        ans[x+2][y+2]='*';
        ans[x+3][y]='*';
        ans[x+3][y+2]='*';
        ans[x+4][y]=ans[x+4][y+1]=ans[x+4][y+2]='*';
    }
    else if(c=='9')
    {
        ans[x][y]=ans[x][y+1]=ans[x][y+2]='*';
        ans[x+1][y]='*';
        ans[x+1][y+2]='*';
        ans[x+2][y]='*';
        ans[x+2][y+1]='*';
        ans[x+2][y+2]='*';
        ans[x+3][y+2]='*';
        ans[x+4][y]=ans[x+4][y+1]=ans[x+4][y+2]='*';
    }


    else if(c=='+')
    {
        ans[x+1][y+1]='*';
        ans[x+2][y]=ans[x+2][y+1]=ans[x+2][y+2]='*';
        ans[x+3][y+1]='*';
    }
    else if(c=='-')
    {
        ans[x+2][y]=ans[x+2][y+1]=ans[x+2][y+2]='*';
    }
    else if(c=='*')
    {
        ans[x+1][y]=ans[x+1][y+2]='*';
        ans[x+2][y+1]='*';
        ans[x+3][y]=ans[x+3][y+2]='*';
    }
    else if(c=='/')
    {
        ans[x+1][y+2]='*';
        ans[x+2][y+1]='*';
        ans[x+3][y]='*';
    }
    else if(c=='=')
    {
        ans[x+1][y]=ans[x+1][y+1]=ans[x+1][y+2]=ans[x+1][y+3]='*';
        ans[x+3][y]=ans[x+3][y+1]=ans[x+3][y+2]=ans[x+3][y+3]='*';
    }
    else if(c=='.')
    {
        ans[x+3][y]=ans[x+3][y+1]='*';
        ans[x+4][y]=ans[x+4][y+1]='*';
    }
}
int main()
{
    gets(s);
    int len=strlen(s);
    for(int i=0; i<100; i++)
    {
        for(int j=0; j<100; j++)
        {
            ans[i][j]=' ';
        }
    }
    int a=0,b=0;
    int pos;
    char c;
    for(int i=0; i<len; i++)
    {
        if(s[i]==' ')
        {
            pos=i;
            break;
        }
        a=a*10+(s[i]-'0');
    }
    for(int i=pos; i<len; i++)
    {
        if(s[i]>='0'&&s[i]<='9')
        {
            b=b*10+(s[i]-'0');
        }
    }
    c=s[pos+1];
    int sum;
    s[len++]='=';
    char ss[10];
    if(c=='+')
    {
        sum=a+b;
        sprintf(ss,"%d",sum);
        for(int i=0; i<strlen(ss); i++)
        {
            s[len++]=ss[i];
        }
        s[len]=0;
    }

    else if(c=='-')
    {
        sum=a-b;
        sprintf(ss,"%d",sum);
        for(int i=0; i<strlen(ss); i++)
        {
            s[len++]=ss[i];
        }
        s[len]=0;
    }
    else if(c=='*')
    {
        sum=a*b;
        sprintf(ss,"%d",sum);
        for(int i=0; i<strlen(ss); i++)
        {
            s[len++]=ss[i];
        }
        s[len]=0;
    }
    else if(c=='/')
    {
        if(a%b==0)
        {
            sum=a/b;
            sprintf(ss,"%d",sum);
            for(int i=0; i<strlen(ss); i++)
            {
                s[len++]=ss[i];
            }
            s[len]=0;
        }
        else
        {
            double f=a*1.0/b;
            sprintf(ss,"%.2f",f);
            for(int i=0; i<strlen(ss); i++)
            {
                s[len++]=ss[i];
            }
            s[len]=0;
        }

    }





    int x=0,y=0;
    for(int i=0; i<len; i++)
    {
        work(s[i],x,y);
        if(s[i]==' ')
        {
            continue;
        }
        if(s[i]=='1')
        {
            y+=3;
        }
        else if(s[i]=='=')
        {
            y+=6;
        }
        else if(s[i]=='.')
        {
            y+=4;
        }
        else
        {
            y+=5;
        }

    }
    for(int i=0; i<x+6; i++)
    {
        for(int j=0; j<y; j++)
        {
            printf("%c",ans[i][j]);
        }
        printf("\n");
    }
    return 0;
}

4、没过就不贴出来。。

26 条回复

坐等官方题解

2017-04-18 21:05

被第三题输入的空格给坑了,最后才看到

2017-04-18 21:06

写了160行,过了C,写的我都炸了,用cin本地随便跑,交上去0%.最后改scanf过了

2017-04-18 21:07

哭死,第三题写了200行,就差几个if没写,写在本地没提交,半分没有

2017-04-18 21:07

2017-04-18 21:08

这次别是满分才能过……

2017-04-18 21:08

第三题测试数据不严谨,没考虑到输出负数的样例

2017-04-18 21:08

我用set<int>一直报错,忘了用set<long>了、、、


2017-04-18 21:08

情况相似。。

第三题写了好久。。230行。。

不过一次AC了。。

感觉测试数据没那么强吧

2017-04-18 21:08

第二题原来这么简单。。。。我还各种二叉树。。。

2017-04-18 21:10

前面两道题我都是用cin,怪不得总是ac不了。。。。。。。。。。。。。

2017-04-18 21:10

第二题 java HashSet为何只通过10%

2017-04-18 21:12
coder_4DVFZ3J8 回复 coder_5BZDA7RP

是不是int,long的问题,题目要求的是2^63

2017-04-18 21:13
coder_HGWR9VHW 回复 coder_FQXPEUNG

set内部是红黑树

2017-04-18 21:15
coder_eTCxssdk 回复 coder_4DVFZ3J8

应该是吧,我用的int只A了50

2017-04-18 21:15
coder_5BZDA7RP 回复 coder_4DVFZ3J8

我用的Set<Long>…提示我空间超了…

2017-04-18 21:17

我1 2题也是这样做的 为什么结果是80%通过 超时?

2017-04-18 21:20
coder_4DVFZ3J8 回复 coder_UPX7VTWX

超时是不是到0结束的问题。。。

2017-04-18 21:21
coder_4DVFZ3J8 回复 coder_5BZDA7RP

这就奇怪了

2017-04-18 21:21
coder_UPX7VTWX 回复 coder_4DVFZ3J8

加了等于0时break

2017-04-18 21:22
为什么java,测试可以,上去就是0%啊!然后换了c语言,测试也好了,还是0%啊!!???


2017-04-18 21:26
coder_Q7CC397D 回复 coder_HGWR9VHW

HashSet不维护顺序的肯定不是红黑树,TreeHashSet是红黑树吧?

2017-04-18 21:40
Eva 回复 coder_4DVFZ3J8

我也是hashset做的,数据类型为long,只过了70%,最后实在没找到问题在哪

2017-04-18 21:43

第四个我有个地方写错了,一直没过,最后十几秒发现问题了,来不及改了,后来改了之后测试用例过了,还是编程能力不够呀,不够仔细呀

2017-04-18 21:46
coder_4DVFZ3J8 回复 Eva

看看代码呗~~

2017-04-18 21:51
coder_HGWR9VHW 回复 coder_Q7CC397D

啊我说的set就是std::set

2017-04-18 22:04
添加回复
回到顶部