ACMICPC南太平洋赛区试题解析1.docx

上传人:b****8 文档编号:9849758 上传时间:2023-05-21 格式:DOCX 页数:7 大小:18.17KB
下载 相关 举报
ACMICPC南太平洋赛区试题解析1.docx_第1页
第1页 / 共7页
ACMICPC南太平洋赛区试题解析1.docx_第2页
第2页 / 共7页
ACMICPC南太平洋赛区试题解析1.docx_第3页
第3页 / 共7页
ACMICPC南太平洋赛区试题解析1.docx_第4页
第4页 / 共7页
ACMICPC南太平洋赛区试题解析1.docx_第5页
第5页 / 共7页
ACMICPC南太平洋赛区试题解析1.docx_第6页
第6页 / 共7页
ACMICPC南太平洋赛区试题解析1.docx_第7页
第7页 / 共7页
亲,该文档总共7页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

ACMICPC南太平洋赛区试题解析1.docx

《ACMICPC南太平洋赛区试题解析1.docx》由会员分享,可在线阅读,更多相关《ACMICPC南太平洋赛区试题解析1.docx(7页珍藏版)》请在冰点文库上搜索。

ACMICPC南太平洋赛区试题解析1.docx

ACMICPC南太平洋赛区试题解析1

2003年ACM-ICPC南太平洋赛区试题解析-1

ACM国际大学生程序设计竞赛由国际计算机学界著名的ACM学会(AssociationforComputerMachinery)主办,是世界上规模最大、水平最高的国际大学生程序竞赛。

本文作为CSTC团队之ACM培训的启动工程训练内容,请从此题入手,开始你们痛并快乐着的ACM之旅。

此题虽为ACM比赛用题,却非常简单,没有什么特别之处,不牵扯数据结构,实为初学者建立自信心的灵丹妙药。

英文原文

P1-ACMSPPC1of2Saturday,20/09/2003

PROBLEM1-WACMIANNUMBERS

InthesupposedlyuninhabitedWacmaharaDesert,atribeofunusualpeoplehas

beendiscovered.TheWacmianshaveonly2fingersandathumboneachhand,

andhaveinventedtheirownnumberingsystem.Thedigitstheyuseandthe

symbolstheyusefordigitsarequiteunusual,butanthropologistshavebeenable

torepresentthemasfollows:

%represents0

)represents1

~represents2

@represents3

?

represents4

\represents5

$represents-1(yes,theyevenhaveanegativedigit)

Asyoumayexpect,theirsystemisbase6whereeachplacevalueis6timesthe

valuetoitsright,asinthefollowingexamples:

)@%is1*62+3*6+0=36+18+0=54

?

$~~is4*63+(–1)*62+2*6+2=864–36+12+2=842

$~~is(–1)*62+2*6+2=–36+12+2=-22

YourtaskistotakeWacmiannumbersandrepresentthemasstandardbase10

numbers.

P1-ACMSPPC2of2Saturday,20/09/2003

INPUTFORMAT

InputconsistsofWacmiannumbers,oneperline.Eachnumberconsistsofa

sequenceof1to10Wacmiandigits.Asingle‘#’onalinebyitselfindicatesthe

endofinput.

SAMPLEINPUT:

)@%

?

$~~

$~~

%

#

OUTPUTFORMAT

Outputwillbethecorrespondingdecimalnumbers,oneperline.

SAMPLEOUTPUT:

54

842

-22

0

这里我们提供出来本题的中文对照:

Wacmian数字

在假设的Wacmahara无人沙漠里,一个非普通人组成的部落被发现了。

Wacmians的每个手上仅有两个手指和一个拇指,并且他们发明了自己的数字系统。

他们使用的数字和用来表示数字的符号都很奇特,但是人类学家已经能够以用下面的方法描述它们:

%--0

)--1

~--2

@--3

?

--4

\--5

$---1(没错,他们甚至有负数)

如你所愿,他们的系统是以6为基础的,每位上的数值达到6就像该位的左边进位,如同随后的例子:

)@%表示1*6^2+3*6+0=36+18+0=54

?

$~~表示4*6^3+(-1)*6^2+2*6+2=864-36+12+2=842

$~~表示(-1)*6^2+2*6+2=-36+12+2=-22

你的任务是把Wacmian数字解释成标准的10进制数字。

输入格式

输入包括Wacmian数字,每行一个。

每个数字由1至10个有顺序的Wacmian数字组成。

一个单独的#占用一行,它标志输入结束。

输入举例:

)@%

?

$~~

$~~

%

#

输出格式

输出相应的是进制数字,每行一个。

输出举例:

54

842

-22

0

本题的解答如下:

#include

#include

intGetData(int*digit,FILE*fp)

{

chartemp;

inti=0;

//使用temp记录从input.in文件中逐个读出的字符

temp=fgetc(fp);

//如果为回车符,表示该数的读取已经结束了

while(temp!

='\n')

{

switch(temp)

{

case'%':

digit[i]=0;break;

case')':

digit[i]=1;break;

case'~':

digit[i]=2;break;

case'@':

digit[i]=3;break;

case'?

':

digit[i]=4;break;

case'/':

digit[i]=5;break;

case'$':

digit[i]=-1;break;

case'#':

return-1;//让函数返回-1表示input.in文件结束

}

//digit[10]用来统计数中的位数

digit[10]=i+1;

i++;//数组下标增加1

//读入下一个字符

temp=fgetc(fp);

}

return0;

}

voidmain()

{

//题目中给每个数最多只有10位

//所以数组定义11位

//前10位保存每位的数字

//最后一位统计位数

intdigit[11];

longnumber=0;//考虑到极值状况,采用long类型

longtemp=1;

inti,j;

FILE*fpInput,*fpOutput;

fpInput=fopen("input.in","r");

fpOutput=fopen("output.out","w");

digit[10]=0;

while(GetData(digit,fpInput)!

=-1)

{

for(i=0;i

{

for(j=0;j

number+=(digit[i]*temp);

temp=1;

//将每一位转换成10进制后都需要为temp初始化

//以便下一位的转换时使用

}

fprintf(fpOutput,"%ld\n",number);

number=0;//每个数字转换完成后number同样需要重新初始化

}

fclose(fpInput);

fclose(fpOutput);

}

postedon2004-06-1219:

57monkeyking阅读(790)评论

(1) 编辑 收藏引用网摘所属分类:

原创

FeedBack:

#2003年ACM-ICPC南太平洋赛区试题解析-1

2004-09-1316:

43|lili

#include 

#include  

int GetData(int *digit,FILE *fp) 

char temp; 

int i=0; 

//使用temp记录从input.in文件中逐个读出的字符 

temp = fgetc(fp); 

//如果为回车符,表示该数的读取已经结束了 

while(temp !

='\n') 

switch (temp) 

case '%':

 digit[i] = 0;break; 

case ')':

 digit[i] = 1;break; 

case '~':

 digit[i] = 2;break; 

case '@':

 digit[i] = 3;break; 

case '?

':

 digit[i] = 4;break; 

case '/':

 digit[i] = 5;break; 

case '$':

 digit[i] = -1;break; 

case '#':

 return -1; // 让函数返回 -1 表示input.in文件结束 

//digit[10]用来统计数中的位数 

digit[10] = i+1; 

i++; //数组下标增加 1 

//读入下一个字符 

temp = fgetc(fp); 

return 0; 

void main() 

//题目中给每个数最多只有10位 

//所以数组定义11位 

//前10位保存每位的数字 

//最后一位统计位数 

int digit[11]; 

long number = 0; //考虑到极值状况,采用long类型 

long temp = 1; 

int i,j; 

FILE *fpInput,*fpOutput; 

fpInput = fopen( "input.in","r"); 

fpOutput = fopen("output.out","w"); 

digit[10] = 0; 

while(GetData(digit,fpInput) !

= -1) 

for(i=0; i

for(j=0; j

number += (digit[i]*temp); 

temp = 1; 

//将每一位转换成10进制后都需要为temp初始化 

//以便下一位的转换时使用 

fprintf(fpOutput,"%ld\n",number); 

number = 0; //每个数字转换完成后number同样需要重新初始化 

fclose(fpInput); 

fclose(fpOutput); 

}

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 初中教育 > 语文

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2