CCF201812-1:샤오밍등교(C언어) 100점 답안
21176 단어 심로 역정.
100점 정답.
제목:
제목 배경
소명은 한동성 정법대학 부속 중학교의 학생으로 매일 자전거를 타고 집과 학교를 왕복한다.그는 가능한 한 충분한 수면을 취하기 위해 학교에 가는 데 필요한 시간을 예상할 수 있기를 바란다.그는 학교에 갈 때 몇 개의 도로를 지나야 하는데, 서로 인접한 두 개의 도로 사이에 여러 개의 신호등이 설치되어 있다.
경주시의 신호등은 이렇게 일한다. 신호등마다 빨간색, 노란색, 녹색 세 개의 등과 카운트다운을 표시할 수 있는 표시판이 있다.신호등이 빨간불 r초, 노란불 y초, 파란불 g초로 설정되면 0시부터 [0,r)초 동안 빨간불이 켜져 차량이 통과하지 못한다. [r,r+g)초 동안 파란불이 켜져 차량이 통과할 수 있다. [r+g,r+g+y)초 동안 노란불이 켜져 차량이 통과하지 못하고 순서대로 순환한다. 카운트다운 표시판에 나타난 숫자 l(l>0)는 다음 신호등이 변화하는 초수를 가리킨다.
문제 설명
한 번 등교하는 길에 샤오밍은 길을 지나는 시간과 각 신호등이 샤오밍이 길목에 도착했을 때의 색깔과 카운트다운 초수를 기록했다.네가 이번 샤오밍이 학교에 가는 데 걸린 시간을 계산해 주기를 바란다.
입력 형식
입력한 첫 줄은 공백으로 구분된 세 개의 정수 r, y, g를 포함하여 신호등의 설정을 나타낸다.이 세 수는 모두 106을 넘지 않는다.
입력한 두 번째 줄은 정정수 n(n≤100)을 포함하고 소명이 모두 지나간 도로 구간수와 보이는 신호등의 수를 나타낸다.
다음 n 줄은 빈칸으로 구분된 두 개의 정수 k, t를 포함한다.k=0은 도로를 지나갔는데 t초가 걸렸고 여기는 t가 106을 넘지 않는다는 것을 나타낸다.k=1, 2, 3시에 각각 빨간색, 노란색, 녹색등을 보았고 카운트다운 표시판에 표시된 숫자는 t이다. 여기서 t는 각각 r, y, g를 초과하지 않는다.
출력 형식
이번 샤오밍이 학교에 다니는 데 걸린 시간을 나타내는 숫자를 출력하다.
샘플 입력
30 3 30
8
0 10
1 5
0 11
2 2
0 6
0 3
3 10
0 3
샘플 출력
70
샘플 설명
샤오밍은 먼저 1구간 도로를 10초 동안 지나 5초간 빨간불을 기다린 뒤 2단 도로를 11초 동안 지나 2초간 노란등과 30초간 빨간불을 기다린 뒤 3구간, 4구간 도로를 각각 6, 3초 동안 지나 청신호를 통과한 뒤 마지막 도로를 3초 동안 지나간다.총 10+5+11+2+30+6+3+3=70초.
용례 규모와 약정을 평가하다
테스트 포인트 1, 2에는 신호등이 없습니다.
시험점 3, 4의 모든 신호등은 관찰될 때 녹색 등이다.
시험점 5, 6의 모든 신호등은 관찰될 때 모두 빨간불이다.
시험점 7, 8의 모든 신호등은 관찰될 때 모두 황등이다.
테스트 포인트 9, 10에는 여러 가지 가능한 상황이 나타날 것이다.
아이디어:
먼저 모든 입력 데이터를 저장하고 집중적으로 처리하며 마지막에 출력한다.입력한 데이터가 얼마나 되는지 확정할 수 없음→체인표 먼저 입력 체인표 → 대기열 체인표
코드:
/*
:
-> -> ->
:
r: r ;
y: y ;
g: g ;
l: , l
:
k=0: , t
k=1: , t (t=l
#include
#include
#include
typedef struct{
int r;//
int y;//
int g;//
}Light;
typedef struct _node{//
int k;
int t;
struct _node *next;
}Node;
typedef struct{//
int n;
Node *head;
}Queue;
Light* initLight(int r,int y,int g){//
Light* L = (Light*)malloc(sizeof(Light));
L->r = r;
L->y = y;
L->g = g;
return L;
}
Queue* initQueue(int n){// ,n
Queue* q = (Queue*)malloc(sizeof(Queue));
q->n = n;
Node* head = (Node*)malloc(sizeof(Node));
head->next = NULL;
q->head = head;
return q;
}
bool empty(Queue* q){//
if(q->head->next==NULL){
return true;
}else{
return false;
}
}
void enQueue(Queue* q,int k,int t){//
Node* new_node = (Node*)malloc(sizeof(Node));
new_node->k = k;
new_node->t = t;
Node* p = q->head;
while(p->next!=NULL){
p = p->next;
}
new_node->next = p->next;
p->next = new_node;
}
bool deQueue(Queue* q,int *k,int *t){// , k,t
if(empty(q)){//
return false;
}
Node* p = q->head->next;
*k = p->k;
*t = p->t;
q->head->next = p->next;
free(p);
return true;
}
int timeCost(Light* L,Queue* Move){//
int cost = 0;//
int k = 0;
int t = 0;
while(!empty(Move)) {
deQueue(Move,&k,&t);
if(k==0){
cost = cost+t;
}else if(k==1){
cost = cost+t;
}else if(k==2){
cost = cost+t+(L->r);
}else{
cost = cost;
}
}
return cost;
}
int main(int argc, char *argv[]) {
//r,y,g
int r = 0;
int y = 0;
int g = 0;
scanf("%d %d %d",&r,&y,&g);
Light* L = initLight(r,y,g);
//n
int n = 0;
scanf("%d",&n);
Queue* Move = initQueue(n);
//k,t
int k = 0;
int t = 0;
int i = 0;
for(i=0;i<Move->n;i++){// C99 ,C99 for(int i =0;i
scanf("%d %d",&k,&t);
enQueue(Move,k,t);
}
int cost = 0;
cost = timeCost(L,Move);
printf("%d",cost);
return 0;
}
평가 결과:
제출 시간: 02-05 14:20(2019년, 즉 정월 초하루) 코드 길이: 2.435KB프로그래밍 언어: C 평가 결과: 정확한 점수: 100시간 사용: 0ms공간 사용: 408.0KB
심로 요약:
이번에는 C99의 for 순환을 발견했습니다. 즉, for (int i = 0; i) 는 CCF에서 컴파일하면 오류를 컴파일합니다. C89의 for 순환으로 바꾸면: int i = 0; for (i = 0; i) 가 됩니다.
하지만 C99 헤더 파일 stdbool.h는 사용할 수 있다. CCF의 컴파일러도 C99를 지원하지 않는 것이 아니라 C99를 지원하지 않는다는 뜻이다.
여러분, 잘못되었거나 더 정확한 소식이 있으면 지적해 주셔서 대단히 감사합니다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
CCF201812-1:샤오밍등교(C언어) 100점 답안제목: 제목 배경 신호등마다 빨간색, 노란색, 녹색 세 개의 등과 카운트다운을 표시할 수 있는 표시판이 있다.신호등이 빨간불 r초, 노란불 y초, 파란불 g초로 설정되면 0시부터 [0,r)초 동안 빨간불이 켜져 차량...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.