POJ 3750, 어린이 번호 문제, 조세 프 문제 시 뮬 레이 션

질문
Time Limit: 1000MS
 
Memory Limit: 65536K
Total Submissions: 9978
 
Accepted: 4649
Description
N 명의 아이들 이 한 바퀴 를 돌 고 그들 에 게 1 부터 순서대로 번 호 를 매 겨 주 었 다. 지금 은 W 번 째 부터 번 호 를 매 겨 서 S 번 째 로 보고 할 때 이 아 이 는 열 을 매 긴 다음 에 다음 아이 부터 번 호 를 매 겨 도 S 번 째 로 보고 하 는 것 을 지정 했다. 이렇게 반복 해서 모든 아이들 이 열 을 매 길 때 까지 (총 인원 이 S 번 이 부족 할 때 순환 번 호 를 매 길 것) 아이 에 게 열 을 매 기 는 순 서 를 구 했다.
Input
첫 줄 에 아이의 수 N 을 입력 하 십시오 (N < = 64) 
다음 줄 마다 한 아이의 이름 을 입력 하 십시오. 
마지막 줄 에 W, S (W < N) 를 입력 하고 쉼표 로 "," 간격
Output
사람 이름 에 따라 아 이 를 출력 하 는 순서 로 줄 마다 한 사람 씩 출력 합 니 다.
Sample Input
5
Xiaoming
Xiaohua
Xiaowang
Zhangsan
Lisi
2,3

Sample Output
Zhangsan
Xiaohua
Xiaoming
Xiaowang
Lisi

이것 이 바로 조세 프 문제 이다. 앞에서 나 는 이런 조세 프 의 절 차 를 쓴 적 이 있다. 여기 서 나 는 단지 간단하게 제기 할 뿐이다.
어떻게 1 차원 배열 로 원 을 그 리 는 문 제 를 완성 할 수 있 습 니까? 먼저 공간 이 비교적 큰 1 차원 배열 을 정의 하고 S 번 째 까지 세 고 열 을 내 면 그 전의 아이들 을 세 는 것 입 니 다.
순서대로 마지막 아이 뒤에 줄 을 서 야 합 니 다. 예 를 들 어 모두 n 명의 아이 입 니 다. 번 호 는 1 부터 n 입 니 다. 배열 p [] 에 놓 고 4 번 을 세 지 못 하면 전체 과정 은 다음 과 같 습 니 다.
p [1] 을 p [n + 1] 에 넣 고 p [2] 를 p [n + 2] 에 넣 고 p [3] 을 p [n + 3] 에 넣 고 뒤 p [4] 를 열 에 올 리 고 p [5] 를 p [n + 4] 에 올 리 고 p [6] 을 p [n + 5] 에 올 리 는 식 으로 유추 하면 간단 하 다.
하지만 이 문제 에 서 는 시작 하기 전에 앞의 w - 1 명 을 n 번 아이의 뒤에 두 어야 합 니 다!
코드 는:
#include <stdio.h>
#include <string.h>
#include <math.h>

struct child
{
	char name[20];
}s[1000];

struct out
{
	char name[20];
}p[65];

int main()
{
	int i,j,k=0,n,front,behind,w,S;
	scanf("%d",&n);
	for(i=1;i<=n;i++)
		scanf("%s",s[i].name);
	scanf("%d,%d",&w,&S);
	front=w;
	behind=n+1;	
	for(i=1;i<w;i++)
	{
		strcpy(s[behind].name,s[i].name);
		behind++;
	}
	while(n--)
	{
		for(i=1;i<S;i++)
		{
			strcpy(s[behind].name,s[front].name);
			behind++;front++;
		}
		strcpy(p[k].name,s[front].name);
		printf("%s
",p[k].name); k++;front++; } return 0; }

좋은 웹페이지 즐겨찾기