UVa 110 순환 정렬 프로그램 없음

제목: Pascal의 정렬 프로그램을 구성합니다.처음에 보면 Pascal 프로그램을 썼는데 모르는 것은 어려울 줄 알았지만 사실은 프로그램의 대부분이 고정되어 있고 직접printf를 쓰면 된다. 주로 비교적인if-else 부분을 쓰는 데 있다.
사고방식:sample out을 보면 프로그램의 구성을 대충 알 수 있고 다른 부분은 직접 출력할 수 있으며 주로 비교 부분을 쓴다.비교할 때 두 개의 집합으로 볼 수 있다. A는 이미 배열된 서열이고 S는 전체 집합이고cur는 왼쪽에서 오른쪽으로 S의 현재 위치를 스캔한다.귀속으로 썼는데 앞부분은 현재 위치cur가 n에 도달했을 때 출력할 수 있다.나머지는 현재 위치cur를 어떻게 작성하고 A를 유지하는지 정렬된 이 성질입니다.새 원소 S[cur]를 A의 맨 오른쪽 끝에서 왼쪽으로 비교하고 새 원소 S[cur]가 비교적 크면 A의 현재 원소의 오른쪽 즉 i+1 위치에 직접 놓는다.그렇지 않으면 새 요소가 작아서 A의 현재 요소를 오른쪽으로 한 자리, 즉 i+1 위치로 복사한 다음 새 요소를 왼쪽 요소와 계속 비교합니다.또 하나는 수조가 함수에 전해지면 내용이 바뀌기 때문에 매번 함수를 전달하기 전에 수조 B를 새로 구성하여 A수조의 내용을 복사하여 출력한다.그렇지 않으면 B수조를 사용하지 않고 A수조를 직접 전하면 두 원소에 문제가 없고, 세 원소에 대해서는ifa
로컬 수정은 여러 번, 한 번의 AC로 현재 하고 있는 모든 문제 중 최고 순위가 74번, 이전에는 11234번이 79번으로 가장 좋았다.너무 느리게 해서 오랫동안 생각한 후에 축소하는 문제도 고려하기 시작했습니다. 샘플 아웃에서 첫 번째if-else와 나중에if-else의 축소는 다르기 때문에...
Code:
#include
#include

void solve(int n);
void compare(int n,char *A,char *S,int cur);

char str[]="abcdefghijklmn"; 

int main()
{
  int m;
  scanf("%d",&m);
  while(m-->0)
  {
    int n;
    scanf("%d",&n);
    solve(n);
    if(m) printf("
"); } return 0; } void solve(int n) { printf("program sort(input,output);
"); printf("var
"); for(int i=0;i=0;--i) { printf(" if %c < %c then
",A[i],S[cur]); A[i+1]=S[cur]; char B[10]; strcpy(B,A); compare(n,B,S,cur+1); printf("else
"); A[i+1]=A[i]; A[i]=S[cur]; //compare(n,A,S,cur+1); } A[0]=S[cur];// cur=0 char B[10]; strcpy(B,A); compare(n,B,S,cur+1); }

좋은 웹페이지 즐겨찾기