수다닷컴

  • 해외여행
    • 괌
    • 태국
    • 유럽
    • 일본
    • 필리핀
    • 미국
    • 중국
    • 기타여행
    • 싱가폴
  • 건강
    • 다이어트
    • 당뇨
    • 헬스
    • 건강음식
    • 건강기타
  • 컴퓨터
    • 프로그램 개발일반
    • C언어
    • 비주얼베이직
  • 결혼생활
    • 출산/육아
    • 결혼준비
    • 엄마이야기방
  • 일상생활
    • 면접
    • 취업
    • 진로선택
  • 교육
    • 교육일반
    • 아이교육
    • 토익
    • 해외연수
    • 영어
  • 취미생활
    • 음악
    • 자전거
    • 수영
    • 바이크
    • 축구
  • 기타
    • 강아지
    • 제주도여행
    • 국내여행
    • 기타일상
    • 애플
    • 휴대폰관련
  • 프로그램 개발일반
  • C언어
  • 비주얼베이직

코딩을 했는데 결과값이 틀려요.

눈솔

2023.04.01


질문 제목 : 왜 저는 결과가 43 52 1 이렇게 나오는걸까요?질문 내용 :
점시시간이 되면 반 학생 모두가 한 줄로 줄을 서 급식을 탄다. 그런데 매일 같이 앞자리에 앉은 학생들이 앞에 줄을 서 먼저 점심
을 먹고 뒷자리에 앉은 학생들은 뒤에 줄을 서 늦게 점심을 먹게 된다. 어떻게 하면 이러한 상황을 바꾸어 볼수가 있을까 고민하던 중 선생님이 다음과 같은 방법을 내 놓았다.
학생들이 한 줄로 줄을 선 후, 첫 번째 학생부터 차례대로 번호를 뽑는다. 첫 번째로 줄을 선 학생은 무조건 0번 번호를 받아 제일 앞에 줄을 선다. 두 번째로 줄 을 선 학생은 0번 또는 1번 둘 중 하나의 번호를 뽑는다. 0번을 뽑으면 그 자리에 그대로 있고, 1번을 뽑으면 바로 앞의 학생 앞으로 가서 줄을 선다.
세번째로 줄을 선 학생은 0,1또는 2 중 하나의 번호를 뽑는다. 그리고 뽑은 번호 만큼 앞자리로 가서 줄을 선다.
마지막에 줄을 선 학생까지 이와 같은 방식으로 뽑은 번호만큼 앞으로 가서 줄을 서게 된다.
각자 뽑은 번호는 자신이 처음에 선 순서보다는 작은 수이다.
예를 들어 5명의 학생이 줄을 서고, 첫 번째로 줄을 선 학생부터 다섯번째로 줄을 선 학생까지 차례로 0,1,1,3,2번의 번호를 뽑았다 하자. 첫 번째 학생부터 다섯 번째 학생까지 1부터 5로 표시하면 학생들이 줄을 선 순서는 다음과 같이 된다.
첫 번째 학생이 번호를 뽑은 후 : 1
두 번째 학생이 번호를 뽑은 후 : 2 1
세 번째 학생이 번호를 뽑은 후 : 2 3 1
네 번째 학생이 번호를 뽑은 후 : 4 2 3 1
다섯 번째 학생이 번호를 뽑은 후 : 4 2 5 3 1
따라서 최종적으로 학생들이 줄을 선 순서는 4 2 5 3 1 이 된다.
줄을 선 학생들이 차례로 뽑은 번호가 주어질 때 학생들이 최종적으로 줄을 선 순서를 출력하시오.
입력 방식
입력 파일의 이름은 input.txt로 한다. 첫째 줄에는 학생의 수가 주어지고 둘째 줄에는 줄을 선 차례대로 학생들이 뽑은 번호가 주어진다.
학생의 수는 100이하이고 학생들이 뽑는 번호는 0또는 자연수이며 학생들이 뽑는 번호 사이에는 빈 칸이 하나씩 있다.

출력 형식

출력 파일의 이름은 output.txt로 한다. 학생들이 처음에 줄을 선 순서대로 1번부터 번호를 매길 때 첫째 줄에 학생들이 최종적으로 줄을 선 순서를 그 번호로 출력한다. 학생 번호 사이에는 한칸의 공백을 출력한다.
include stdio.h
file *in=fopen(input.txt,r);
file *out=fopen(output.txt,w);
int main(void)
{
int arr[100];
int a,i;
int top=1;
int b;
int temp;
fscanf(in,%d\n,&a); //학생의 수
for(i=0; ia; i++)
{
arr[i]=top; // 1~ 5까지..
top++;
}
for(i=0; ia; i++)
{
fscanf(in,%d,&b); //0 1 1 3 2 이것을 입력받게 해봤어요;
temp=arr[i];
arr[i]=arr[i-b];
arr[i-b]=temp;
}
for(i=0; ia; i++)
fprintf(out,%d ,arr[i]);
return 0;
}

신청하기





COMMENT

댓글을 입력해주세요. 비속어와 욕설은 삼가해주세요.

  • 쇼코홀릭

    뽑은 숫자만큼의 학생 수를 뽑은 숫자 만큼의 앞에 학생부터 그 숫자만큼 뒤로 밀리게 한 후에 뽑은 숫자만큼 앞에 자기자신을 위치시키면 됩니다. 예를 들면, 0번을 뽑았으면 0명의 앞의 학생이 0번이 밀려나고 0번 앞에 그 학생을 넣습니다. 0일 때는 그 자리 그대로 있겠죠. 어떤 학생이 4번을 뽑았으면 4번 앞에 위치한 학생부터 한 칸씩 뒤로 밀리게 한 후에 4번 앞에다가 그 학생을 넣으면 됩니다.

  • 미련곰팅이

    감사합니다. 글면 어떻게 해야 하죠?

  • 맑은가람

    수다님께서 짜신 소스에서 순서가 매겨지는 방법은 한 학생의 위치와 그 학생이 뽑은 번호만큼의 앞에 있는 학생의 위치와 바꾸는 것입니다. 4번째 학생이 3번을 뽑았을 때를 보면, 4와 2가 바뀝니다. 그럼 4 3 1 2가 되겠죠. 그 다음에 5번째 학생이 2번을 뽑으면 5와 1이 바뀌게 되므로 결국 4 3 5 2 1이 됩니다.

    0번이나 1번을 뽑게 되는 경우는 위치가 바뀌는 것이 맞지만, 2보다 큰 번호를 뽑게 되면 그 학생은 앞으로 가게 되고

번호 제 목 글쓴이 날짜
2700070 while문 , 3의배수 출력하는 프로그램좀 짜주세욤. 횃불 2025-07-01
2700041 초보인데요 ㅎ 배열안에 배열을 집어넣을수 있나요?? 헛장사 2025-07-01
2700012 배열// (1) 전갈자리 2025-07-01
2699895 무한루프에 빠집니다.!! 해결좀부탁드려요 (10) 선아 2025-06-30
2699842 질문을 너무 많이 하네여.....죄송.... (2) 해님꽃 2025-06-29
2699816 오류 질문입니다.. (1) 해비치 2025-06-29
2699763 질문입니다 ! 꼭 좀 도와주세요ㅠㅠ (2) 미라 2025-06-28
2699555 c언어 다항식을 입력을 했는데 왜 출력이 안될까요? 피스케스 2025-06-27
2699528 C언어 포인터연산 질문입니다. (3) 안녕나야 2025-06-26
2699476 끌어올림;;달력 짜봤는데요 이 소스 줄일 수 있나요? - 스샷첨부 (2) 클라우드 2025-06-26
2699444 [좀 급함] system("explorer [주소] ") 문에 변수를 사용할 수 있나요? 알 2025-06-26
2699415 파일//read//와 배열 아란 2025-06-25
2699386 구조체 안에 일부분만 char 배열에 복사하려면 어떻게 해야하나요? (1) 미즈 2025-06-25
2699361 연결리스트 정렬하는 부분에 대해서 질문 드립니다 아이처럼 2025-06-25
2699304 [기초]아직 안주무시는분 계신가요..?포인터배열? 좀 도와주세요. 놀리기 2025-06-24
2699272 printf() 함수이용해서 프로그램 만들기 질문요! (5) 다가 2025-06-24
2699221 PUSH와 POP코드를 더 간단하게 어떻게 해야할까요? 파라미 2025-06-24
2699192 설치오류가 자꾸 나요 한번봐주세여~ (1) 소녀틳향기 2025-06-23
2699161 for loop안에 있는 if문 (9) Orange 2025-06-23
2699105 링크더리스트 이전 링크값 출력함수. 꼬꼬마 2025-06-23
<<  이전  1 2 3 4 5 6 7 8 9 10  다음  >>

수다닷컴 | 여러분과 함께하는 수다토크 커뮤니티 수다닷컴에 오신것을 환영합니다.
사업자등록번호 : 117-07-92748 상호 : 진달래여행사 대표자 : 명현재 서울시 강서구 방화동 890번지 푸르지오 107동 306호
copyright 2011 게시글 삭제 및 기타 문의 : clairacademy@naver.com