병사 대열 훈련 문제 / 대열 / C 언어 표현
13548 단어 데이터 구조
Title Description 모 부 대 는 신병 대열 훈련 을 실시 하여 신병 을 처음부터 순서대로 번 호 를 매 겨 일렬 횡대 로 배치한다. 훈련의 규칙 은 다음 과 같다. 처음부터 1 부터 2 까지 번호, 2 까지 번호, 나머지 는 작은 번호 방향 으로 다가 가 고 처음부터 1 부터 3 까지 번호, 3 까지 번호, 나머지 는 작은 번호 방향 으로 다가 간다.계속 처음부터 1 부터 2 까지 번호...이후 처음부터 1 ∼ 2 번, 1 ∼ 3 번 을 돌아 가면 서 나머지 인원 이 3 명 을 넘 지 않 을 때 까지 진행한다.
Input 본 문 제 는 여러 테스트 데이터 그룹 이 있 으 며, 첫 번 째 행동 그룹 은 N 이 고, 이 어 N 행 신병 수 이 며, 신병 수 는 5 천 명 을 넘 지 않 는 다.
Output 은 모두 N 줄 로 각각 입력 한 신병 수 에 대응 하 며, 줄 마다 남 은 신병 의 최초 번 호 를 출력 하 며, 번호 사이 에 빈 칸 이 있 습 니 다.
Sample Input
2 20 40
Sample Output
1 7 19 1 19 37
생각:
대열 의 사상 을 활용 하여 병사 들 이 원 을 그 리 는 것 을 상상 하 다.조세 프 링 처럼.같은 사상.
AC 코드:
#include
#include
int main()
{
int t,n,i;
while(~scanf("%d",&t)) //
{
while(t--) //t
{
int x=0; // , , ( )
int k=1; // 2 3 , k=1 ,-1
int a[5050]={0}; // , , 1, 0
scanf("%d",&n);
int cnt=n; //
// , ,
if(n==1)
{
printf("1
");continue;
}
else if(n==2)
{
printf("1 2
");continue;
}
else if(n==3)
{
printf("1 2 3
");continue;
}
else{
while(1) // , , 3
{
x=0;
for(i=1;i<=n;i++)
{
if(k==1) // 2
{
if(a[i]==0)
{
x++;
}
if(x==2)
{
a[i]=1; //
cnt--; //
x=0;
}
}
if(k==-1) // 3
{
if(a[i]==0)
{
x++;
}
if(x==3)
{
a[i]=1; //
cnt--; //
x=0;
}
}
}
k=-k; // 3 2,
if(cnt<=3) // 3
{
break;
}
}
}
x=0;
for(i=1;i<=n;i++)
{
if(a[i]!=1)
{
if(x!=0) // !0
printf(" ");
printf("%d",i);
x++;
}
}
printf("
");
}
}
return 0;
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
정수 반전Udemy 에서 공부 한 것을 중얼거린다 Chapter3【Integer Reversal】 (예) 문자열로 숫자를 반전 (toString, split, reverse, join) 인수의 수치 (n)가 0보다 위 또는 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.