UVa 110 순환 정렬 프로그램 없음
사고방식: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);
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
UVa 548 트리제목: 중순과 후순 서열을 제시하고 뿌리에서 잎사귀 결점까지의 경로와 값이 가장 작은 잎사귀 결점을 구한다.값과 같으면 잎사귀 결점 값이 비교적 작은 것을 선택하십시오. 사고방식: 중순과 후순 서열로 돌아가며 두 갈...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.