소스는 이것이구요. 문제가 소스 밑에 있어요. 이거 논리적으로 문제랑 소스랑 연관지어 분석 좀 해주세요. 왜 이렇게 되는지요.
이걸 연필로 for문 10개를 써 대입해서 해봤는데도 결국은 ㅠㅠ
#include<stdio.h>
const int ARRAY_SIZE = 10001;
int real_index(int index, int offset)
{
return (index+offset) % ARRAY_SIZE;
}
int main()
{
int a, b, d, n, i;
int wc;
int wd[ARRAY_SIZE];
int growth, offset;
FILE *fin = fopen("INPUT.TXT", "r");
fscanf(fin, "%d %d %d %d", &a, &b, &d, &n);
fclose(fin);
for(i=0; i<=ARRAY_SIZE-1; i++)
wd[i]=0;
wd[1]=1;
wc=1;
growth=0;
offset=1;
for(i=0; i<n; i++)
{
offset=(offset-1+ARRAY_SIZE)%ARRAY_SIZE;
growth=(growth+wd[real_index(a, offset)]-wd[real_index(b, offset)]+1000)%1000;
wd[real_index(0, offset)]=growth;
wc=(wc-wd[real_index(d, offset)]+wd[real_index(0, offset)]+1000)%1000;
}
FILE *fout=fopen("OUTPUT.TXT", "w");
fprintf(fout, "%d\n", wc);
fclose(fout);
return 0;
}
짚신벌레
<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /><o:p></o:p>
한 생물학자가 새로 발견된 짚신벌레 종의 생태에 대해 연구하고 있다. 매우 번식력이 강하다고 알려진 이 종은 아래와 같은 특징을 가지고 있다.
<o:p></o:p>
∙ 무성 생식을 한다.
∙ 태어난 이후 a일째 되는 날 성체가 된다.
∙ 성체가 된 날부터 매일 한 마리씩 새로운 개체를 만들어낸다: 성체가 되자마자 첫 개체를 만들어내고, 그 이후로 하루가 지날 때마다 새로운 개체를 하나씩 만들어낸다. 새로운 개체 역시 태어난 이후로 a일째 되는 날부터 성체가 되어 새로운 개체를 만든다.
∙ 태어난 이후로 b일째 되는 순간부터는 새로운 개체를 더 이상 만들지 않는다. 태어난 지 a일째 날부터 b일째 되는 날의 전날까지 새로운 개체를 만들어내므로 일생동안 총 b-a 마리의 개체를 만들어낸다.
∙ 태어난 이후로 d일째 되는 순간 죽는다.
<o:p></o:p>
아래는 a=2, b=4, d=6일 때 수조에 새로 태어난 짚신벌레 한 마리를 넣고 매일 관찰한 결과를 기록한 것이다. 괄호 안의 숫자들은 수조 안의 짚신벌레들이 각각 태어난 이후 며칠이 되었는지를 나타내는 정수이다.
<o:p></o:p>
∙ 태어난 날: (0) - 새로운 개체를 집어넣음
∙ 1일째 되는 날: (1) - 짚신벌레가 자람
∙ 2일째 되는 날: (2, 0) - 짚신벌레가 태어난 지 2일째가 되므로 성체가 되고 새 개체를 만들어 냄
∙ 3일째 되는 날: (3, 1, 0) - 2일째 성체가 된 짚신벌레가 오늘도 새 개체를 하나 만들어 냄
∙ 4일 째 되는 날: (4, 2, 1, 0) - 2일째 되는 날 만들어진 짚신벌레가 새로운 개체를 만들어 냄 (처음에 넣은 짚신벌레는 새 개체를 만들어내지 못함)
∙ 5일 째 되는 날: (5, 3, 2, 1, 0, 0)
∙ 6일 째 되는 날: (4, 3, 2, 1, 1, 0, 0) - 처음에 넣은 개체는 죽는다.
6일 째 되는 날 수조안에 살아있는 짚신벌레는 총 7마리가 된다.
짚신벌레의 번식 정보 a, b, d에 대하여, 새로 태어난 짚신벌레 한 마리를 수조 안에 넣은 이후 N일째 되는 날 살아있는 짚신벌레 수를 1000으로 나눈 나머지를 출력하는 프로그램을 작성하시오.
실행파일의 이름은 WORM.EXE로 하고, 프로그램의 실행시간은 1초를 넘을 수 없다. 부분 점수는 없다.
<o:p></o:p>
입력 형식
입력 파일의 이름은 INPUT.TXT로 한다. 첫째 줄에 a, b, d, N을 나타내는 네 정수가 빈칸 하나를 사이에 두고 차례로 주어진다. 단, 0 < a < b < d ≤ 10,000이고, 1 ≤ N ≤ 1,000,000이다.
<o:p></o:p>
출력 형식
출력 파일의 이름은 OUTPUT.TXT로 한다. 첫째 줄에, 수조에 짚신벌레 한 마리를 넣은 지 N일째 되는 날 수조에 살아 있는 짚신벌레의 수를 1000으로 나눈 나머지를 출력한다.
<o:p></o:p>
입력과 출력의 예 1
<o:p></o:p>
입력(INPUT.TXT)
2 4 6 6 |
출력(OUTPUT.TXT)
7 |
<o:p></o:p>
입력과 출력의 예 2
입력(INPUT.TXT)
3 5 7 20000 |
출력(OUTPUT.TXT)
609 |
오늘안에 꼭 해야되요. 한글로 정리해서 보내주셔도되요. 한글로 보내주실분은 qkqhsmsckrgo@naver.com
부탁드립니다. 프갤러님들 ㅠㅠ
진짜 보기 싫게 적어뒀다..
보내드렸습니다 ^^