원탁 프로그래밍
17957 단어 PHP
문제는 다음과 같다.
도쿄의 하치에는 긴 테이블로 유명한 오래된 장어집이 있다.
그 장어집에는 매우 큰 긴 탁자가 있는데 탁자 주위에 n개의 좌석을 배치했다.
좌석 번호는 시계 방향으로 1, 2,..., n입니다.
좌석은 책상 주위에 배치되어 있기 때문에 좌석번호 n의 좌석과 1의 좌석이 인접해 있다.(다음 그림 참조)

현재 m팀의 사람들은 순서대로 자리에 앉아 있다.i조(1≤i≤m)의 인원수를 a_로 설정i인으로서
그들은 긴 탁자 위에 배열된 좌석 중 연속적인 a_가 있다i석에 같이 앉고 싶어요.
그러나 손님이 강호인이기 때문에 이 좌석들 중 먼저 온 손님이 앉으면
한 사람도 앉지 않고 팀 전체가 화가 나서 돌아갔다.강호 사람들은 매우 빠르다.
입력에서 i조가 앉을 연속 좌석의 위치는 정수 b_i 지정.
i조는 좌석번호 b_i의 좌석을 기점으로 그곳에서 시계방향으로 a_i석에 앉고 싶습니다.
마지막 팀이 앉으면 테이블석에 순조롭게 앉을 수 있는 인원수를 출력하는 프로그램을 만들어 보세요.
또한 이번 표준 입력 값은 다음과 같습니다.
6 3
3 2
1 6
2 5
여기서 절차를 진행하다.우선, 테이블 수, 그룹 수의 표준 입력 값이 기재될 것이다
나는 fgets 함수를 이용하여 얻고 싶다.
list($table_counts,$group_counts)=explode(" ",fgets(STDIN));
$seats=array_pad(array(),$table_counts,0);
상술한 방법에 따라 explode 함수로 공백으로 분할첫 번째 배열의 총 표수, 두 번째 배열의 총 조수를 얻을 수 있다.
또한,array_pad 함수를 통해
Array
(
[0] => 0
[1] => 0
[2] => 0
[3] => 0
[4] => 0
[5] => 0
)
이런 배열은 배열 결과를 얻을 수 있다.이어 각 조의 총 인원수를 입력하고 자리에 앉는 표준을 얻는다.
for 구문 사용하기
for($i=0;$i<$group_counts;$i++){
list($group_member,$sit_position)=explode(" ",trim(fgets(STDIN)));
}
이로써 모든 표준 입력 값이 완성됩니다.드디어 프로그램의 설치로 옮겼습니다.
우선 빈 좌석 상태를 확인하는 프로그램을 만든다.
여기 프로그램은 아까 기재된 for문법이에요.
안에서 처리하다.
$sit_position-=1;
for($j=$sit_position;$j<$sit_position+$group_member;$j++){
if($j>$table_counts){
$circle_sit=$j-$table_counts;
}
if($seats[$j]>0){
$is_empty=false;
break;
}
}
주의해야 할 것은 $j의 범위를 지정할 때$sit_position+$group_member
이렇게 정의하면 $seats 수조는 분배열에서 벗어날 수 있기 때문에 미리 $sit_position-=1;
의 정의입니다.그리고 다음 조건식
if($j>$table_counts){
$circle_sit=$j-$table_counts;
}
변수 j 변수를 통해table_그것이counts보다 크면 시계의 첫 번째 위치로 순환한다변수 j에서 표를 빼면 원탁 처리를 할 수 있다.
그리고
if($seats[$j]>0){
$is_empty=false;
break;
}
누가 앉아있을 때.if($seats[$j]>0)
이런 상황에서 처리는 브레이크에 의해 중단되었다.또한 $is_empty는 빈 자리인지 여부를 정의합니다.
이렇게 하면 빈자리가 있을 때 처리가 완성되기 때문이다
착석 처리를 하다.
이 경우 변수 is_왜냐하면 empty가 진짜니까.
if($is_empty==true){
for($j=$sit_position;$j<$sit_position+$group_member;$j++){
if($j>$table_counts){
$circle_sit=$j-$table_counts;
}
$seats[$j]=1;
}
}
이렇게 처리하다.이곳의 처리는 방금 빈 좌석의 순환 처리와 같다.
그리고 자리에 앉을 때
$seats[$j]=1;
이렇게 기재하면빈자리
배열 값 0
입석할 때
배열의value는 1입니다.
지금
print_r($seats);
형식Array
(
[0] => 0
[1] => 1
[2] => 1
[3] => 1
[4] => 0
[5] => 0
)
Array
(
[0] => 0
[1] => 1
[2] => 1
[3] => 1
[4] => 0
[5] => 1
)
Array
(
[0] => 0
[1] => 1
[2] => 1
[3] => 1
[4] => 0
[5] => 1
)
의 규격화 거리의 멱 함수.이로써 빈 좌석, 착석 상황을 이해하는 절차가 완성되었다.
마지막
$count=0;
for($i=0;$i<$table_counts;$i++){
if($seats[$i]>0){
$count+=1;
}
}
echo $count;
그래서 제가 책상에 앉은 사람을조사할 수 있습니다.
모든 코드는 다음과 같다.
<?php
list($table_counts,$group_counts)=explode(" ",fgets(STDIN));
$seats=array_pad(array(),$table_counts,0);
print_r($seats);
for($i=0;$i<$group_counts;$i++){
list($group_member,$sit_position)=explode(" ",trim(fgets(STDIN)));
$sit_position-=1;
//echo $group_member;
//echo $sit_position;
//空席の処理
$is_empty=true;
for($j=$sit_position;$j<$sit_position+$group_member;$j++){
if($j>$table_counts){
$circle_sit=$j-$table_counts;
}
if($seats[$j]>0){
$is_empty=false;
break;
}
}
if($is_empty==true){
for($j=$sit_position;$j<$sit_position+$group_member;$j++){
if($j>$table_counts){
$circle_sit=$j-$table_counts;
}
$seats[$j]=1;
}
}
print_r($seats);
}
$count=0;
for($i=0;$i<$table_counts;$i++){
if($seats[$i]>0){
$count+=1;
}
}
echo $count;
?>
가방을 가져다 주시면 기쁠 거예요.잘 부탁드립니다.
Reference
이 문제에 관하여(원탁 프로그래밍), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/yukou29good0910/items/06d38b55e704a553aa25텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)