바이트 댄스 2019 여름 인턴 알고리즘 강 필 시험 문제

5402 단어 필기시험.
목차
  • 첫 번 째 문제
  • 제목
  • 사고방식
  • 코드
  • 두 번 째 문제
  • 제목
  • 사고방식
  • 코드
  • 세 번 째 문제
  • 제목
  • 사고방식
  • 코드
  • 네 번 째 문제
  • 제목
  • 사고방식
  • 코드
  •        필기시험 은 모두 4 개의 프로 그래 밍 문제 로 한 문제 당 20 분, 두 시간 이다.이 문 제 는 텐 센트 의 것 보다 좀 간단 한 것 같다.아래 내용 의 작성 은 모두 기억 과 개인 적 인 이해 에 의 해 이 루어 집 니 다. 잘못된 점 이 있 으 면 양해 해 주 십시오.
    첫 번 째 문제
    제목
           한 사람 은 1024 원 짜 리 지폐 로 n 원 짜 리 상품 을 구 매 했 고, 판매 자 는 4 가지 동전 으로 0 을 찾 았 다. 각각 1, 4, 16, 64 로 판매자 에 게 0 을 찾 으 려 면 최소 몇 개의 동전 이 필요 하 냐 고 물 었 다.
    사고의 방향
           동전 의 액면 가 를 작은 것 부터 큰 것 까지 정렬 하여 계산 하면 된다.
    코드
    #include
    #include
    #include
    #include
    #include
    #include
    #include
    #include
    #include
    #include
    
    using namespace std;
    
    int main()
    {
        int n ;
        while(scanf("%d",&n)!=EOF)
        {
            int rec = 1024 - n;
            int num64 = rec / 64;
            rec = rec - 64*num64;
            int num16 = rec / 16;
            rec = rec - 16*num16;
            int num4 = rec / 4;
            rec = rec - 4*num4;
            int num1 = rec / 1;
            rec = rec - 1*num1;
            printf("%d
    ",num64+num16+num4+num1); } return 0; }

    제2 문제
    제목
           한 프로그래머 가 문자열 을 자동 으로 처리 하 는 코드 를 썼 습 니 다. 규칙 은 두 가지 가 있 습 니 다. ① aabb 형 하위 문자열 이 있 으 면 aab 로 바 꿉 니 다.② ccc 형 하위 문자열 이 있 으 면 cc 로 변경 합 니 다.프로그래머 의 코드 를 재현 합 시다.
    사고의 방향
           아 날로 그 문제 입 니 다. 제 생각 은 문자열 의 규칙 에 맞지 않 는 위 치 를 문자 '@' 로 대체 하 는 것 입 니 다. 마지막 으로 출력 할 때 이 위 치 를 무시 하면 됩 니 다.
    코드
    #include
    #include
    #include
    #include
    #include
    #include
    #include
    #include
    #include
    #include
    
    using namespace std;
    
    char s[8000000];
    
    int main()
    {
        int t;
        scanf("%d",&t);
        while(t--)
        {
            scanf("%s",s);
            int len = strlen(s);
            for(int i = 0 ; i < len; )
            {
                int next1 = i+1;
                while(s[next1] == '@' && next1

    제3 문제
    제목
           선생님 은 한 무리의 학생 들 에 게 그들의 성적 에 따라 상품 을 주 려 고 하 는데 학생 들 은 원탁 주위 에 둘러싸 여 모든 사람 이 자신의 성적 을 가지 고 있다.상품 을 주 는 규칙 은 ① 모든 학생 에 게 적어도 하나의 상품 이 있다.② 좌우 옆 자리 학생 보다 성적 이 좋 은 학생 이 있다 면 그들 보다 더 많은 상품 을 받 아야 한다.― 선생님 은 적어도 몇 개의 상품 을 준비 해 야 합 니까?
    사고의 방향
           성적 에 따라 작은 것 부터 큰 것 까지 순서대로 상품 을 주면 된다.여기에 구조 체 정렬 을 사용 했다.
    코드
    #include
    #include
    #include
    #include
    #include
    #include
    #include
    #include
    #include
    #include
    
    using namespace std;
    
    int num[100000+10];
    
    struct TMP
    {
        int num,ll,rr,rec;
        int pos;
    }tmp[100000+10],org[100000+10];
    
    int cmp(TMP a, TMP b)
    {
        return a.num < b.num;
    }
    
    int main()
    {
        int t;
        scanf("%d",&t);
        while(t--)
        {
            int n;
            scanf("%d",&n);
            for(int i=0;i org[org[pos].ll].num)
                    should_rec = max(should_rec, org[org[pos].ll].rec+1);
                if(org[pos].num > org[org[pos].rr].num)
                    should_rec = max(should_rec, org[org[pos].rr].rec+1);
                org[pos].rec = should_rec;
                //printf("%d %d %d %d %d
    ",org_pos, tmp[i].num, tmp[i].ll, tmp[i].rr, tmp[i].rec); } int ans = 0; for(int i=0; i

    네 번 째 문제
    제목
           n 개의 끈 이 있어 서 모든 길 이 를 드 립 니 다.지금 은 이 n 개의 밧줄 에서 m 개의 긴 밧줄 을 잘라 달라 고 요구 합 니 다.
    사고의 방향
           등장끈 은 최 단 0, 최 장 n 개의 끈 중 가장 긴 끈 길 이 를 초과 하지 않 을 것 이 므 로 왼쪽 단점 을 0, 오른쪽 단점 을 최 장 끈 길이, 2 분 + 판단 으로 설정 하면 된다.2 분 의 종료 조건 에 주의해 야 합 니 다. 정밀도 가 너무 높 게 설정 되 어 서 는 안 됩 니 다. 그렇지 않 으 면 WA 가 제목 의 0.01 로 설정 되 거나 0.001 로 설정 할 수 있 습 니 다.
    코드
    #include
    #include
    #include
    #include
    #include
    #include
    #include
    #include
    #include
    #include
    
    using namespace std;
    
    int num[100000+10];
    int n,m;
    
    int _check(double _need)
    {
        int ans = 0;
        for(int i=n;i>=1;--i)
        {
            double tmp = num[i]*1.0;
            ans = ans + (tmp/_need);
        }
        if(ans >= m)
            return 1;
        else
            return 0;
    }
    
    int main()
    {
        while(scanf("%d%d",&n,&m)!=EOF)
        {
            for(int i=1;i<=n;++i)
                scanf("%d",&num[i]);
            sort(num+1,num+1+n);
            double ll = 0;
            double rr = num[n];
            while((rr-ll) > 0.001)
            {
                double mm = (ll+rr)/2;
                if(_check(mm))
                    ll = mm;
                else
                    rr = mm;
            }
            printf("%.2f
    ", ll); } return 0; }

    좋은 웹페이지 즐겨찾기