Отримання знань
дистанційна підтримка освіти школярів
Входные данные
Выходные данные
Пример входных данных
Пример выходных данных
Анализ условия и обсуждение идеи решения
Пример решения на C++:
#include < cstdio >
#include < iostream >
#include < cstring >
#include < memory >
using namespace std;
const char digit[11]="-123456789";
const char special[3]="X/";
char marking[1 << 4][1 << 4];
char name[1 << 4];
int score[1 << 4];
int main()
{
int i,curr,prev,knock,frame,ball,bonus,cntsorce,cntmarking,nextmark;
while(scanf("%s",name)!=EOF)
{
memset(score,0,sizeof(score));
frame=cntmarking=cntsorce=1;
nextmark=ball=bonus=0;
prev=10;
while((scanf("%d",&curr)!=EOF)&&(curr!=-1))
{
knock=prev-curr;
if((bonus&1)!=0)
{
score[cntsorce]=score[cntsorce]+10+knock;
score[cntsorce+1]=score[cntsorce];
cntsorce++;
bonus--;
}
if(bonus==2)
{
score[cntsorce]=score[cntsorce]+knock;
bonus--;
}
if(curr > 0)
{
marking[cntmarking][nextmark++]=digit[knock];
}
else
{
marking[cntmarking][nextmark++]=special[ball];
}
if((ball==0)&&(curr!=0))
{
ball=1;
prev=curr;
continue;
}
if(curr==0)
{
bonus=bonus+2-ball;
}
else
{
score[cntsorce]=score[cntsorce]+10-curr;
score[cntsorce+1]=score[cntsorce];
cntsorce++;
}
if(frame < 10)
{
marking[cntmarking++][nextmark]='\0';
nextmark=0;
}
ball=0;
curr=10;
frame++;
prev=curr;
}
printf("%-13s",name);
if((curr!=10)||(cntmarking==10))
{
for(i=1; i < cntmarking; i++)
{
printf("%-4s",marking[i]);
}
marking[cntmarking][nextmark]='\0';
printf("%-1s\n",marking[cntmarking]);
}
else
{
for(i=1; i < cntmarking-1; i++)
{
printf("%-4s",marking[i]);
}
printf("%-1s\n",marking[cntmarking-1]);
}
printf(" ");
for(i=1; i < cntsorce; i++)
{
printf("%4d",score[i]);
}
printf("\n\n");
}
return 0;
}
Попередня | Зміст | Наступна |