FESTIVAL 첫문제 부터 막히네요. 도와주세요.

  • soulslayer44
    soulslayer44

    시작부터 난관이네요

    부끄러운 코드지만 용기내어 올립니다.

    혼자하면 되는데

    왜 올리면 실패가 뜰까요..

    #include<stdio.h>
    #include<stdlib.h>
    #include<string.h>
    
    double avercost(int arr[],int first,int insize)
    {
        int i,ret=0;
    
        for(i=0;i<insize;i++)
        {
            ret+=arr[first+i];
        }
    
        return (double)ret/(double)insize;
    }
    
    int main(void)
    {
        int i,m;
        int testcase,numofday,alrteam,cost[1000],size;
        char inpstr[5000]={NULL},*chapstr;
        double result[100];
    
        scanf("%d",&testcase);
    
        for(m=0;m<testcase;m++)
        {   
            scanf("%d %d",&numofday,&alrteam);
            getchar();
            gets(inpstr);
    
            chapstr=strtok(inpstr," ");
            cost[0]=atoi(chapstr);
    
            for(i=1;i<numofday;i++)
            {
                chapstr=strtok(NULL," ");
                cost[i]=atoi(chapstr);
            }
    
            result[m]=9999;
            size=alrteam;
    
            while(size<=numofday)
            {
                for(i=0;i<numofday-(size-1);i++)
                    if(result[m]>avercost(cost,i,size))
                        result[m]=avercost(cost,i,size);
                size++;
            }
        }
    
        for(m=0;m<testcase;m++)
            printf("%lf\n",result[m]);
    }
    

    11년 전
6개의 댓글이 있습니다.
  • Neon
    Neon

    gets 함수를 쓰셨고 inpstr에 5000개의 배열을 잡으셨는데요, 한 줄에 들어오는 숫자의 갯수(최대 1000개)와 각 숫자의 자릿수(최대 3자리), 거기에 공백 문자의 유무 여부를 감안하시면 5000이... 문제가 되죠.

    fgets를 써서 그 반환값을 사용하시던가, getline 등의 C++ iostream 함수를 쓰던가, 혹은 그냥 strtok 쓰지 말고 scanf(" %d",...)를 활용하는게 훨씬 맘편할 것 같습니다. 속도 노리는 변태는 nextInt 같은 함수를 만들어 쓰기도 하는데...


    11년 전 link
  • soulslayer44
    soulslayer44

    3자리수에 빈칸 1칸을 포함해자 4자리수라고 생각하고 1000자이므로 4000칸이라고 생각했는데 오류가있나요.. 배열 크기를 1만 까지 늘렸는데도 안되요 ㅜㅜ 콕 찝어서 가르쳐주시면 감사하겟습니다.. 왠만하면 혼자 해보려고 하는 타입인데 몇시간째 코딩에 변화가 없고 반례도 못찾겠고 오답만 계속 뜨네요..
    scanf 를 쓰고싶은데 scanf 로 스페이스로 연결된 임의의 갯수 입력은 어떻게 입력 받는지도 알려주시면 감사하겠습니다.. 도와주세요!!


    11년 전 link
  • Kureyo
    Kureyo

    scanf로 입력받는 법은 numofday만큼 for문 돌면서 scanf("%d",&cost[i])로 입력받아보세요


    11년 전 link
  • soulslayer44
    soulslayer44

    이거 띄어쓰기로 죽 입력 받는건데 scanf로 입력 받아도 되는건가요?
    scanf로 입력받으면 다음줄로 계속 넘어가잖아요


    11년 전 link
  • Taeyoon_Lee
    Taeyoon_Lee

    scanf로 입력받으면 다음줄로 넘어가지 않습니다.


    11년 전 link
  • soulslayer44
    soulslayer44

    정말 입력만 바꿨더니 깔끔하게 풀렸네요. 도와주신 분들 너무너무 감사드립니다.


    11년 전 link
  • 정회원 권한이 있어야 커멘트를 다실 수 있습니다. 정회원이 되시려면 온라인 저지에서 5문제 이상을 푸시고, 가입 후 7일 이상이 지나셔야 합니다. 현재 문제를 푸셨습니다.