uva11129

2681 단어
제목 대의: 2보다 큰 서열을 구성하는 것은 모두 등차수열이 아닌 서열이다.
사고: 처음에는 전혀 생각이 없었는데 나중에 문제풀이를 보고 알았어요.예컨대 0 1 2 3 4, 먼저 0 2 4 1 3이 되고 다시 돌아가는 해결이 0 4 2 3 이 됩니다.
코드:
#include <iostream>
using namespace std;
#include <stdio.h>
#include <cstring>
#define MAXN 10004

int ans[MAXN];

void solve(int begin,int end) {
    if(begin == end) return;
    int pos = begin;
    int temp[MAXN];
    memcpy(temp,ans,sizeof(ans));
    for(int i = begin; i <= end; i+= 2) {
        ans[pos++] = temp[i];
    }
    for(int i = begin+1; i<= end; i +=2) {
        ans[pos++] = temp[i];
    }
    solve(begin,(begin + end)/2);
    solve((begin + end)/2 + 1,end);
}
int main() {
    int n;
    while(scanf("%d",&n)!= EOF && n ) {
        for(int i = 0 ; i <n; i++){
            ans[i] = i;
        }
        solve(0,n-1);
        printf("%d:",n);
        for(int i = 0 ; i <n; i++) {
            printf(" %d",ans[i]);
        }
        printf("
"
); } return 0; }

좋은 웹페이지 즐겨찾기