平顶山学院ACM竞赛试题及答案.docx

上传人:b****6 文档编号:6797449 上传时间:2023-01-10 格式:DOCX 页数:16 大小:19.32KB
下载 相关 举报
平顶山学院ACM竞赛试题及答案.docx_第1页
第1页 / 共16页
平顶山学院ACM竞赛试题及答案.docx_第2页
第2页 / 共16页
平顶山学院ACM竞赛试题及答案.docx_第3页
第3页 / 共16页
平顶山学院ACM竞赛试题及答案.docx_第4页
第4页 / 共16页
平顶山学院ACM竞赛试题及答案.docx_第5页
第5页 / 共16页
点击查看更多>>
下载资源
资源描述

平顶山学院ACM竞赛试题及答案.docx

《平顶山学院ACM竞赛试题及答案.docx》由会员分享,可在线阅读,更多相关《平顶山学院ACM竞赛试题及答案.docx(16页珍藏版)》请在冰豆网上搜索。

平顶山学院ACM竞赛试题及答案.docx

平顶山学院ACM竞赛试题及答案

以下三道题,作为本次ACM大赛选拔选手的试题。

请同学们按照要求完成程序,并对程序进行注释。

同时简要说明编程思路。

程序以电子邮件形式发到邮箱

计科院发送到赵凯老师的邮箱zacky@

软件学院发送到马飞老师的邮箱mafei0603@

请写明姓名、学号和班级,于5月5日以前提交。

【试题一】

灾区已经非常困难,灾民需要帐篷、衣物、食品和血浆。

可通往灾区的道路到处都是塌方,70%以上的路面损坏,桥梁全部被毁。

中国空军立即启动应急预案,展开史上最大强度非作战空运行动,准备向灾区空投急需物资。

由于余震不断,天气恶劣,怎样知道空投的物资是否落在某灾区的区域内?

经过空中观测,多数灾区为一圆形,空投的物资落在P(Xj,Yj)点。

你能否给出一个正确判断?

【标准输入】

第1行:

NM(N为灾区数,M为空投的物资数)

接下有N行:

Xi0Yi0Ri(Xi0,Yi0)为圆心坐标,Ri为圆半径i=1,2,….,N

接下有M行:

XjYij(Xj,Yj)为空投物资的坐标j=1,2,….,M)

【标准输出】

输出有M行,每一行输出YES(若物资落在某个圆上或圆内,输出YES

或NO否则输出NO)

【约束条件】

(1)1≤N≤32≤M≤10

(2)Ri是一个正整数Ri<=50i=1,2,….,N

(3)所有的圆心坐标和物资的坐标均为整数范围均在[-100,100]内

(4)时间限制:

1000MS

【样例】

标准输入标准输出

23

0020

-703050

1010

-3060

3030YES

YES

NO

【试题二】

据不完全统计,受地震影响,四川大部分灾区通信陷入瘫痪,数千个基站因断电、传输中断等原因退出服务,目前总公司已紧急部署对受灾地区进行通信抢修。

按照应急通信保障预案,必须尽快、付出代价最小,效率更高来全力恢复通信。

由于四川大部分灾区都处于山区,有很多基站之间不能直接建立通信。

现已知建立各基站之间直接通信的代价,问如何建立总代价最小的通信网,使得任意两个基站之间都能通信?

【标准输入】

第1行:

NM(N为基站数M为能直接建立通信关系数)

接下有M行:

IJP(每行有三个数。

IJ为基站的编号

P为基站I与基站之间直接通信的代价)

【标准输出】

T(建立通信网的最小代价数)

【约束条件】

(1)2≤N≤10010≤M≤1000

(2)0

(3)时间限制:

1000MS

【样例】

标准输入标准输出

57

12160

1330

1420

23200

3450

3580

5470280

【试题三】

密码破译

某组织欲破获一个外星人的密码,密码由一定长度的字串组成。

此组织拥有一些破译此密码的长度不同的钥匙,若两个钥匙的长度之和恰好为此密码的长度,则此密码被成功破译。

现在就请你编程找出能破译此密码的两个钥匙。

【标准输入】

第一行:

NN为钥匙的个数(1<=N<=1000)

第二行:

LL为密码的长度

以下有N行:

Ai每一行是一把钥匙的长度i=1,2,……,N

【标准输出】

若无法找到破译此密码的钥匙,则输出0

若找到两把破译的钥匙,则输出文件有两行,分别为两把钥匙的编号,按从小到大输出。

若有多种破译方案,则只输出包含起始编号最小的一组即可。

[【约束条件】

(1)1<=N,L,Ai<=1000(i=1,2,…..,N)

(2)时间限制:

1000MS

【样例】

标准输入标准输出

10

80

27

9

4

73

23

68

12

64

92

166

7

4.班级管理系统

#include

#include

intmain()

{

//intpan(inta,intb);

intn,m;

inta,b,c;

scanf("%d%d",&n,&m);//输入第一行;

intA[3],B[3],C[3],D[100]={0};//

for(inti=0;i

scanf("%d%d%d",&A[i],&B[i],&C[i]);

for(intj=0;j

{

scanf("%d%d",&a,&b);

for(intk=0;k

{

if(-C[k]<(a-A[k])

{

c=(A[k]-a)*(A[k]-a)+(B[k]-b)*(B[k]-b);

if(c>=C[k]*C[k])//c代表落点与中心距离的平方;

D[k]=1;//1代表YES

else

D[k]=0;

}

else

continue;

}

}

for(intl=0;l

if(D[l]==1)

printf("YES\n");

else

printf("NO\n");

return0;

}

说明:

此题昨晚下了晚自习编的记不多清了,不过此题我编的有点字母过于多;思路就先判断到圆心

x的距离以减少计算按步骤;#include

intxiao(inta,intb)

{

if(b==0)

returna;

elseif(a>b)

returnb;

else

returna;

}

intmain()

{

intm,n,A=0,B=0,C,D,E;

intx,y,z;

inta[100][100]={0};

intb[100]={0};

intc[100]={0};//这个地方有点浪费空间,

scanf("%d%d",&n,&m);

for(inti=0;i

{

scanf("%d%d%d",&x,&y,&z);

B=xiao(z,B);

if(y>x)

a[x-1][y-1]=z;

else

a[y-1][x-1]=z;

}

for(i=0;i

{

for(intj=i;j

{

if(a[i][j]==B&&E==1)

{

E=E+1;

break;

}

elseif((a[i][j]==0)||(&a[i][j]==a[i]))

continue;

else

{

C=a[i][j];

D=c[j];

c[j]=xiao(C,D);

D=c[i];

c[i]=xiao(C,D);

}

}

}

for(intk=0;k

{

A=A+c[k];

printf("%d\n",A);

if(c[k]=0)

{

printf("不嫩全部连接");

break;

}

}

A=A-B;

printf("%d",A);

return0;

}

/*说明:

这道题我花了很长时间,刚开始想不起来,感觉题不那么容易,不过在没路的时候看了一下数据

发现了这个规律,不过这时也有一点错误,恰好提上带的数据不能发现,其他人用另外的数据告诉我错

的,结果主要是去了两行,有点笨,这道题就是每个点都有到的了,肯定还有一个重复的减去就可以了

;*/#include

intmain()

{

intN,L;

inta,b=0,c=0;

intA[1000];

scanf("%d",&N);

scanf("%d",&L);

for(inti=0;i

scanf("%d",&A[i]);

for(intj=0;j

{

a=L-A[j];

for(intk=j+1;k

{

if(a==A[k])

{

b=j+1;

c=k+1;

break;

}

}

if(b!

=0)

break;

}

printf("\n%d%d",b,c);

}

说明:

此题比较简单;没什么好说的,就让从头开始每个与后面的挨个比较;#include

#include

#include

#include

structchengji

{

charyuwen[8];

charyingyu[8];

charshuoxue[8];

charzongfen[8];

};

structstudent

{

charname[20];

charnum[10];

structchengjifenshuo;

};

charfilename[10];

FILE*fp;

voidcreat();

voidoutput();

voidsearch();

voidappend();

voidmodify();

voiddeete();

voidmain()

{

intm;

creat();

while

(1)

{

printf("\n\n添加,请按1");

printf("\n查找,请按2");

printf("\n修改,请按3");

printf("\n删除,请按4");

printf("\n输出,请按5");

printf("\n退出,请按0\n");

scanf("%d",&m);

if(m>=0&&m<=5)

{

switch(m)

{

case1:

append();

break;

case2:

search();

break;

case3:

modify();

break;

case4:

deete();

break;

case5:

output();

break;

case0:

exit(0);

}

printf("\n\n操作完毕,请再次选择!

");

}

else

printf("\n\n选择错误,请重新选择!

");

}

}

voidcreat()

{

intsum=0;

structstudentone;

longs1;

printf("请输入班级名:

");

scanf("%s",filename);

if((fp=fopen(filename,"w"))==NULL)

{

printf("\n不能建立班级!

");

exit(0);

}

fprintf(fp,"%-21s%-11s%-9s%-9s%-9s%-9s\n","姓名","学号","语文","英语","数学","总分");

printf("\n请输入姓名,学号,(语文,英语,数学分数)(以0结束)\n");

scanf("%s",&one.name);

//fprintf(fp,"%-20s%-20s%-20s%-20s%-20s%-20s\n","姓名","学号","语文","英语","数学","总分");

//fprintf(fp,"%-20s%-20s%-20s%-20s%-20s%-20s\n","姓名",“学号“,”语文”,“英语","数学","总分”);fprintf(fp,"%-20s%-20s%-20s%-20s%-20s%-20s\n","姓名",“学号“,”语文”,“英语","数学","总分”);fprintf(fp,"%-20s%-20s%-20s%-20s%-20s%-20s\n","姓名",“学号“,”语文”,“英语","数学","总分”);fprintf(fp,"%-20s%-20s%-20s%-20s%-20s%-20s\n","姓名",“学号“,”语文”,“英语","数学","总分”);fprintf(fp,"%-20s%-20s%-20s%-20s%-20s%-20s\n","姓名",“学号“,”语文”,“英语","数学","总分”);while(strcmp(one.name,"0"))

while(strcmp(one.name,"0"))

{

scanf("%s%d%d%d\n",one.num,&one.fenshuo.yuwen,&one.fenshuo.yingyu,&one.fenshuo.shuoxue);

sum=*one.fenshuo.yuwen+*one.fenshuo.yingyu/*+one.fenshuo.shuoxue*/;

fprintf(fp,"%-21s%-11s%-9d%-9d%-9d%-9d\n",one.name,one.num,*one.fenshuo.yuwen,*one.fenshuo.yingyu,*one.fenshuo.shuoxue,*sum);

scanf("%s",one.name);

}

fclose(fp);

}

voidoutput()

{

structstudentone;

if((fp=fopen(filename,"r"))==NULL)

{

printf("\n不能打开班级!

");

exit(0);

}

printf("\n\n%11s\n","班级");

while(!

feof(fp))

{

fscanf(fp,"%s%s%s%s%s%s\n",one.name,one.num,one.fenshuo.yuwen,one.fenshuo.yingyu,one.fenshuo.shuoxue,one.fenshuo.zongfen);

printf("%-21s%-11s%-9s%-9s%-9s%-9s",one.name,one.num,one.fenshuo.yuwen,one.fenshuo.yingyu,one.fenshuo.shuoxue,one.fenshuo.zongfen);

}

fclose(fp);

}

voidappend()

{

intsum;

structstudentone;

if((fp=fopen(filename,"a"))==NULL)

{

printf("\n不能打开班级!

");

exit(0);

}

printf("\n请输入添加的姓名,学号,(语文,英语,数学分数)");

scanf("%s%s%s%s%s\n",one.name,one.num,one.fenshuo.yuwen,one.fenshuo.yingyu,one.fenshuo.shuoxue);

sum=*one.fenshuo.yuwen+*one.fenshuo.yingyu+*one.fenshuo.shuoxue;

fprintf(fp,"%-21s%-11s%-9s%-9s%-9s%-9s\n",one.name,one.num,one.fenshuo.yuwen,one.fenshuo.yingyu,one.fenshuo.shuoxue,sum);

fclose(fp);

printf("操作结束");

}

voidsearch()

{

intk=0;

charnamekey[20];

structstudentone;

printf("\n请输入性名:

");

scanf("%s",namekey);

if((fp=fopen(filename,"rb"))==NULL)

{

printf("\n不能打开班级!

");

exit

(1);

}

//while(!

feop(fp))

while(!

feof(fp))

{

fscanf(fp,"%s%s%s%s%s\n",one.name,one.num,one.fenshuo.yuwen,one.fenshuo.yingyu,one.fenshuo.shuoxue);

if(!

strcmp(namekey,one.name))

{

printf("\n\n已查到,记录为:

");

printf("%-21s%-11s%-9s%-9s%-9s%-9s\n",one.name,one.num,one.fenshuo.yuwen,one.fenshuo.yingyu,one.fenshuo.shuoxue,one.fenshuo.zongfen);

k=1;

}

}

if(!

k)

printf("\n\n对不起,班级中没有此人记录。

");

fclose(fp);

}

voidmodify()

{

intm,k=0;

longoffset;

charnamekey[20];

structstudentone;

printf("\n请输入姓名:

");

scanf("%s",namekey);

if((fp=fopen(filename,"r+"))==NULL)

{

printf("\n不能打开班级!

");

exit(0);

}

while(!

feof(fp))

{

offset=ftell(fp);

fscanf(fp,"%s%s%s%s%s\n",one.name,one.num,one.fenshuo.yuwen,one.fenshuo.yingyu,one.fenshuo.shuoxue);

if(!

strcmp(namekey,one.name))

{

k=1;

break;

}

}

if(k)

{

printf("\n\n已查到,记录为:

");

printf("%-21s%-11s%-9s%-9s%-9s%-9s\n",one.name,one.num,one.fenshuo.yuwen,one.fenshuo.yingyu,one.fenshuo.shuoxue,one.fenshuo.zongfen);

printf("\n请输入添加的姓名,学号,(语文,英语,数学分数)");

scanf("%s%s%s%s%s\n",one.name,one.num,one.fenshuo.yuwen,one.fenshuo.yingyu,one.fenshuo.shuoxue);

fseek(fp,offset,SEEK_SET);

printf("%ld",ftell(fp));

fprintf(fp,"%-21s%-11s%-9s%-9s%-9s%-9s\n",one.name,one.num,one.fenshuo.yuwen,one.fenshuo.yingyu,one.fenshuo.shuoxue,one.fenshuo.zongfen);

}

else

printf("\n对不起,班级中没有此人记录。

");

fclose(fp);

}

voiddeete()

{

intm,k=0,flag;

longoffset1,offset2;

charnamekey[20],valid[4];

structstudentone;

printf("\n请输入姓名:

");

scanf("%s",namekey);

if((fp=fopen(filename,"r+"))==NULL)

{

printf("\n不能打开班级!

");

exit(0);

}

while(!

feof(fp))

{

offset1=ftell(fp);

fscanf(fp,"%s%s%s%s%s\n",one.name,one.num,one.fenshuo.yuwen,one.fenshuo.yingyu,one.fenshuo.shuoxue);

if(!

strcmp(namekey,one.name))

{

k=1;

break;

}

}

if(k)

{

printf("\n\n已查到,记录为:

");

printf("%-21s%-11s%-9s%-9s%-9s%-9s\n",one.name,one.num,one.fenshuo.yuwen,one.fenshuo.yingyu,one.fenshuo.shuoxue,one.fenshuo.zongfen);

printf("\n确实要删除,按1;不删除,按0:

");

scanf("%d",&m);

if(m)

{

fseek(fp,offset1,SEEK_SET);

fprintf(fp,"%-21s%-11s%-9s%-9s%-9s%-9s\n","","","","","","");

}

}

else

printf("\n对不起,班级中没有此人记录。

");

fclose(fp);

}

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

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

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1