[데이터 구조] 조세 프 문제 풀이 보고서

2816 단어
Problem Description
(본 문 제 는 순환 링크 로 이 루어 져 야 합 니 다)
조세 프 문 제 는 전형 적 인 문제 이다.n 명 (각각 번호 1, 2, 3,..., n 대표) 이 원탁 주위 에 둘 러 앉 아 번호 가 k 인 사람 부터 1 부터 시계 방향 으로 1, 2, 3,...........................................그리고 나 서 다음 사람 부터 시작 해서 1 부터 시계 방향 으로 계속 번 호 를 매기 고 m 까지 센 사람 이 나 와 서 출력 합 니 다...................................................................
입력: n, k, m 출력: 열 거 된 순서에 따라 열 거 된 사람의 번 호 를 순서대로 출력 합 니 다. 번호 중간 에 빈 칸 이 있 고 10 개의 번 호 는 한 줄 입 니 다.불법 입력 의 대응 출력 은 다음 과 같다.
a) 입력: n, k, m 중 1 개 이상 의 출력:
n,m,k must bigger than 0.

b) 입력: k > n 출력:
k should not bigger than n.

입력
9,3,2

출력
4 6 8 1 3 7 2 9 5

AcCode
//  main.cpp
//       
//
//  Created by jetviper on 2017/3/26.
//  Copyright © 2017  jetviper. All rights reserved.
//

#include "stdio.h"
#include "stdlib.h"
#include "stdlib.h"
#include "math.h"
#define LEN sizeof(struct linklist)

typedef struct linklist
{
    int num;
    struct linklist *next;
}list;
struct linklist * create_list(int n)
{
    list *head;
    list *p1, *p2;
    head = (struct linklist *)malloc(LEN);
    p2 = head;
    p2->next = NULL;
    p1 = NULL;
    for (int i = 1; i <= n; i++)
    {
        p1 = (struct linklist *)malloc(LEN);
        p1->num = i;
        p2->next = p1;
        p2 = p1;
        p1->next = NULL;
    }
    p1->next = head->next;
    return head;
}

void serch(struct linklist *head, int n, int k,int m)
{
    list *p1, *p2;
    p1 = head->next;
    p2 = NULL;
    list *temp;
    while (1) {
        if (p1->num != k) {
            p1 = p1->next;
            continue;
        }
        else break;
    }
    int cout=1;
    for (int i = 0; i < n; i++)
    {
        for (int j = 1; j < m; j++)
        {
            p2 = p1;
            p1 = p1->next;
        }
        if (i == n - 1) {
            printf("%d
", p1->num); cout++; } else if (cout == 10) { printf("%d
", p1->num); cout = 1; } else { printf("%d ", p1->num); cout++; } temp = p1; p2->next = temp->next; p1 = temp->next; free(temp); } } int main() { int n,k,m; list *head; scanf("%d,%d,%d", &n,&k, &m); if (n < 1 || k < 1 || m < 1) { printf("n,m,k must bigger than 0.
"); return 0; } if (k>n) { printf("k should not bigger than n.
"); return 0; } head = create_list(n); serch(head, n,k, m); }

좋은 웹페이지 즐겨찾기