2010程序设计大赛决赛题及参考答案
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
样例输出:
Men Women Children
1:0 20 10
2:11811
3:21612
4:31413
5:41214
6:51015
7:6816
8:7617
9:8418
10: 9219
11: 10020
Java参考答案:
void main()
{
intmen,women,children;
intcount=0;
{
Scanner input=newScanner(System.in);
String treeName;//读进来的每棵树的名字
intcount;
Hashtable<String,Integer> trees=newHashtable<String,Integer>();
while(input.hasNext())
for(inti=0;i<treeNames.length;i++)
{
System.out.print(treeNames[i]+": ");
doublerate=(trees.get(treeNames[i]).intValue())/(double)total*100;
System.out.printf("%.4f",rate);
{
a[2]="";
switch(i)
{
case0:
z[0] = m[0] + m[1];
a[0] ="("+m[0]+"+"+ m[1]+")";
break;
case1:
z[0] = m[0] - m[1];
a[0] ="("+m[0] +"-"+ m[1]+")";
break;
case2:
z[0] = m[0] * m[1];
if (len>=8 && len<=16){
memset(b, 0, 4);
for (i=0; i<len; ++i){
if (s[i]>='A' && s[i]<='Z'){
b[0] = 1;
}
else if (s[i]>='a' && s[i]<='z'){
b[1] = 1;
}
else if (s[i]>='0' && s[i]<='9'){
Cypress 3.4483
Gum 3.4483
Hackberry 3.4483
Hard Maple 3.4483
Hickory 3.4483
Pecan 3.4483
Poplan 3.4483
Red Alder 3.4483
Red Elm 3.4483
Red Oak 6.8966
Sassafras 3.4483
样例输入:
2591
样例输出:
2*9+5+1
参考答案:
importjava.util.Scanner;
publicclassPoint24 {
publicstaticvoidmain(String args[])
{
booleant =false;
int[] m =newint[4];
Scanner input=newScanner(System.in);
scanf(“%d”,days);
if(days!=0)
{
for(inti=1;i<days;i++)
{
k=(k+1)*2;
}
printf("蟠桃园原本总共有"+k+"个桃子");
}
}
第二部分(中等难度题型):
3、(15分)求输入的两个数的最大公约数。
样例输入:
8 10
样例输出:
2
Java参考答案:
{
treeName=input.nextLine();
if(treeName.equals("-1Leabharlann Baidu))
{
break;
}
count=1;
if(trees.containsKey(treeName))
{
count=trees.remove(treeName).intValue()+1;
}
trees.put(treeName, count);
Soft Maple 3.4483
Sycamore 3.4483
White Oak 10.3448
Willow 3.4483
Yellow Birch 3.4483
参考答案:
importjava.util.*;
publicclassTrees
{
publicstaticvoidmain(String args[])
Red Oak
White Oak
Poplan
Sassafras
Sycamore
Black Walnut
Willow
样例输出:
Ash 13.7931
Aspen 3.4483
Basswood 3.4483
Beech 3.4483
Black Walnut 3.4483
Cherry 3.4483
Cottonwood 3.4483
{
treeNames[index]=(String)E_trees.nextElement();
total=total+trees.get(treeNames[index]).intValue();
index++;
}
//排序
for(inti=treeNames.length-1;i>0;i--)
{
for(intj=0;j<i;j++)
m[0]=input.nextInt();
m[1]=input.nextInt();
m[2]=input.nextInt();
m[3]=input.nextInt();
int[] z =newint[] {0,0,0 };
String[] a =newString[3];
intresult=24;
for(inti = 0; i < 4; i++)
a[0] ="("+m[0] +"*"+ m[1]+")";
break;
case3:
if(m[0]%m[1]==0)
{
z[0] = m[0]/m[1];
a[0] ="("+m[0] +"/"+ m[1]+")";
}
break;
}
for(intj = 0; j < 4; j++)
{
switch(j)
{
printf("%10s%10s%10s\n”,”men”,”women”,”children");
for(men=0;men<=16;men++)
for(women=0;women<=25;women++)
for(children=0;children<=30;children++)
if(men+women+children==30&&men*3+women*2+children==50)
输入
输入数据是一个正整数n(1≤n≤30),表示只剩下一个桃子的时候是在第n天发生的。
输出
对于每组输入数据,输出第一天开始吃的时候桃子的总数。
样例输入
4
样例输出
22
Java参考答案:
voidmain()
{
int days;
intk=1;//表示桃子的总个数
printf("请输入剩下一个桃子的时候是第几天:");
b[2] = 1;
}
else if (strchr("~!@#$%^", s[i]) != NULL){
b[3] = 1;
}
}
r = 0;
for (i=0; i<4; ++i){
r += b[i];
}
printf("%s\n", r>=3 ? "YES" : "NO");
}
else{
printf("NO\n");
System.out.println();
}
}
}
6、(25分)给定四个正整数,用算术运算符+,-,*,/将这4个正整数连接起来(不使用括号),使得最终的得数恰为24,如果无法得到24,输出提示。
输入:
输入数据为4个正整数。
输出:
当输入的数据能按要求组合成24时,输出其中的一种组合方式。当无法得到24时,输出提示“impossible”。
}
return 0;
}
第三部分(高难度题型):
5、(25分)卫星可以扫描地球上的森林,利用卫星成像技术,可以识别出森林里的每一颗树木的品种。现在给出卫星扫描出的所有树木的记录,请计算出每个品种树木的数量。
输入:
输入数据中包括一列由卫星观察到的各颗树的品种,每棵树一行。
输出:
按字母顺序输出树木的品种,然后是这种品种在整体中占的比例,精确到四位小数。
样例输入1
Linle@ACM
样例输出1
YES
样例输入2
^~^@^@!%
样例输出2
NO
C参考答案:
#include <stdio.h>
#include <string.h>
int main(){
char s[51], b[4];
int len, i, r;
scanf("%s", s);
len = strlen(s);
这四个字符类别分别为:
1.大写字母:A,B,C...Z;
2.小写字母:a,b,c...z;
3.数字:0,1,2...9;
4.特殊符号:~,!,@,#,$,%,^;
给你一个密码,你的任务就是判断它是不是一个安全的密码。
输入
输入数据是一个密码(长度最大可能为50),密码仅包括上面的四类字符。
输出
对于每个输入的密码,判断这个密码是不是一个安全的密码,是的话输出YES,否则输出NO。
海南软件职业技术学院第四届计算机文化节
程序设计大赛决赛题
提醒:请各队在各自电脑D盘根目录下创建一个命名为“2010程序设计大赛-队名”的文件夹,将所有题目的答案都放到此目录底下。
做题过程中请注意保存。每做完一题就通过电子教室系统提交一次,电脑上没装电子教室软件的每题做完后举手示意工作人员用U盘提交。
}
intcategoryNum=trees.size();
String treeNames[]=newString[categoryNum];
EnumerationE_trees=trees.keys();
inttotal=0;//用来计算总的树木棵树
intindex=0;
while(E_trees.hasMoreElements())
{
if(treeNames[j].compareTo(treeNames[j+1])>0)
{
String temp=treeNames[j];
treeNames[j]=treeNames[j+1];
treeNames[j+1]=temp;
}
}
}
//输出结果
System.out.println("统计结果:");
case0:
z[1] = z[0] + m[2];
a[1] ="("+a[0] +"+"+ m[2]+")";
各题源文件都分别保存在一个单独的文件夹中,文件夹命名为:题号_队名。
第一部分(简单题型):
1、(10分)马克思手稿中有一道趣味数学问题:有30个人,其中有男人、女人和小孩,在一家饭馆吃饭花了50先令;每个男人花3先令,每个女人花2先令,每个小孩花1先令;问男人、女人和小孩各有几人?输出所有可能的组合。
{
count++;
printf(“%2d%10d%10d%10d\n”,count,men,women,children);
}
}
2、(10分)孙悟空在大闹蟠桃园的时候,第一天吃掉了所有桃子总数一半多一个,第二天又将剩下的桃子吃掉一半多一个,以后每天吃掉前一天剩下的一半多一个,到第n天准备吃的时候只剩下一个桃子。这下可把神仙们心疼坏了,请帮忙计算一下,第一天开始吃的时候桃子一共有多少个桃子。
importjava.util.Scanner;
publicclassGreatestCD
{
staticintgcd(inta,intb)
{
if( b==0)
{
returna;
}
else
{
returngcd(b, a % b);
}
}
publicstaticvoidmain(String args[])
}
}
4、(15分)网上流传一句话:"常在网上飘啊,哪能不挨刀啊~"。其实要想能安安心心地上网其实也不难,学点安全知识就可以。
首先,我们就要设置一个安全的密码。那什么样的密码才叫安全的呢?一般来说一个比较安全的密码至少应该满足下面两个条件:
(1).密码长度大于等于8,且不要超过16。
(2).密码中的字符应该来自下面“字符类别”中四组中的至少三组。
{
System.out.println("请输入您要求最大公约数的两个整数:");
Scanner input=newScanner(System.in);
inta=input.nextInt();
intb=input.nextInt();
System.out.println("它们的最大公约数是:"+gcd(a,b));
样例输入:
Red Alder
Ash
Aspen
Basswood
Ash
Beech
Yellow Birch
Ash
Cherry
Cottonwood
Ash
Cypress
Red Elm
Gum
Hackberry
White Oak
Hickory
Pecan
Hard Maple
White Oak
Soft Maple
Red Oak
Men Women Children
1:0 20 10
2:11811
3:21612
4:31413
5:41214
6:51015
7:6816
8:7617
9:8418
10: 9219
11: 10020
Java参考答案:
void main()
{
intmen,women,children;
intcount=0;
{
Scanner input=newScanner(System.in);
String treeName;//读进来的每棵树的名字
intcount;
Hashtable<String,Integer> trees=newHashtable<String,Integer>();
while(input.hasNext())
for(inti=0;i<treeNames.length;i++)
{
System.out.print(treeNames[i]+": ");
doublerate=(trees.get(treeNames[i]).intValue())/(double)total*100;
System.out.printf("%.4f",rate);
{
a[2]="";
switch(i)
{
case0:
z[0] = m[0] + m[1];
a[0] ="("+m[0]+"+"+ m[1]+")";
break;
case1:
z[0] = m[0] - m[1];
a[0] ="("+m[0] +"-"+ m[1]+")";
break;
case2:
z[0] = m[0] * m[1];
if (len>=8 && len<=16){
memset(b, 0, 4);
for (i=0; i<len; ++i){
if (s[i]>='A' && s[i]<='Z'){
b[0] = 1;
}
else if (s[i]>='a' && s[i]<='z'){
b[1] = 1;
}
else if (s[i]>='0' && s[i]<='9'){
Cypress 3.4483
Gum 3.4483
Hackberry 3.4483
Hard Maple 3.4483
Hickory 3.4483
Pecan 3.4483
Poplan 3.4483
Red Alder 3.4483
Red Elm 3.4483
Red Oak 6.8966
Sassafras 3.4483
样例输入:
2591
样例输出:
2*9+5+1
参考答案:
importjava.util.Scanner;
publicclassPoint24 {
publicstaticvoidmain(String args[])
{
booleant =false;
int[] m =newint[4];
Scanner input=newScanner(System.in);
scanf(“%d”,days);
if(days!=0)
{
for(inti=1;i<days;i++)
{
k=(k+1)*2;
}
printf("蟠桃园原本总共有"+k+"个桃子");
}
}
第二部分(中等难度题型):
3、(15分)求输入的两个数的最大公约数。
样例输入:
8 10
样例输出:
2
Java参考答案:
{
treeName=input.nextLine();
if(treeName.equals("-1Leabharlann Baidu))
{
break;
}
count=1;
if(trees.containsKey(treeName))
{
count=trees.remove(treeName).intValue()+1;
}
trees.put(treeName, count);
Soft Maple 3.4483
Sycamore 3.4483
White Oak 10.3448
Willow 3.4483
Yellow Birch 3.4483
参考答案:
importjava.util.*;
publicclassTrees
{
publicstaticvoidmain(String args[])
Red Oak
White Oak
Poplan
Sassafras
Sycamore
Black Walnut
Willow
样例输出:
Ash 13.7931
Aspen 3.4483
Basswood 3.4483
Beech 3.4483
Black Walnut 3.4483
Cherry 3.4483
Cottonwood 3.4483
{
treeNames[index]=(String)E_trees.nextElement();
total=total+trees.get(treeNames[index]).intValue();
index++;
}
//排序
for(inti=treeNames.length-1;i>0;i--)
{
for(intj=0;j<i;j++)
m[0]=input.nextInt();
m[1]=input.nextInt();
m[2]=input.nextInt();
m[3]=input.nextInt();
int[] z =newint[] {0,0,0 };
String[] a =newString[3];
intresult=24;
for(inti = 0; i < 4; i++)
a[0] ="("+m[0] +"*"+ m[1]+")";
break;
case3:
if(m[0]%m[1]==0)
{
z[0] = m[0]/m[1];
a[0] ="("+m[0] +"/"+ m[1]+")";
}
break;
}
for(intj = 0; j < 4; j++)
{
switch(j)
{
printf("%10s%10s%10s\n”,”men”,”women”,”children");
for(men=0;men<=16;men++)
for(women=0;women<=25;women++)
for(children=0;children<=30;children++)
if(men+women+children==30&&men*3+women*2+children==50)
输入
输入数据是一个正整数n(1≤n≤30),表示只剩下一个桃子的时候是在第n天发生的。
输出
对于每组输入数据,输出第一天开始吃的时候桃子的总数。
样例输入
4
样例输出
22
Java参考答案:
voidmain()
{
int days;
intk=1;//表示桃子的总个数
printf("请输入剩下一个桃子的时候是第几天:");
b[2] = 1;
}
else if (strchr("~!@#$%^", s[i]) != NULL){
b[3] = 1;
}
}
r = 0;
for (i=0; i<4; ++i){
r += b[i];
}
printf("%s\n", r>=3 ? "YES" : "NO");
}
else{
printf("NO\n");
System.out.println();
}
}
}
6、(25分)给定四个正整数,用算术运算符+,-,*,/将这4个正整数连接起来(不使用括号),使得最终的得数恰为24,如果无法得到24,输出提示。
输入:
输入数据为4个正整数。
输出:
当输入的数据能按要求组合成24时,输出其中的一种组合方式。当无法得到24时,输出提示“impossible”。
}
return 0;
}
第三部分(高难度题型):
5、(25分)卫星可以扫描地球上的森林,利用卫星成像技术,可以识别出森林里的每一颗树木的品种。现在给出卫星扫描出的所有树木的记录,请计算出每个品种树木的数量。
输入:
输入数据中包括一列由卫星观察到的各颗树的品种,每棵树一行。
输出:
按字母顺序输出树木的品种,然后是这种品种在整体中占的比例,精确到四位小数。
样例输入1
Linle@ACM
样例输出1
YES
样例输入2
^~^@^@!%
样例输出2
NO
C参考答案:
#include <stdio.h>
#include <string.h>
int main(){
char s[51], b[4];
int len, i, r;
scanf("%s", s);
len = strlen(s);
这四个字符类别分别为:
1.大写字母:A,B,C...Z;
2.小写字母:a,b,c...z;
3.数字:0,1,2...9;
4.特殊符号:~,!,@,#,$,%,^;
给你一个密码,你的任务就是判断它是不是一个安全的密码。
输入
输入数据是一个密码(长度最大可能为50),密码仅包括上面的四类字符。
输出
对于每个输入的密码,判断这个密码是不是一个安全的密码,是的话输出YES,否则输出NO。
海南软件职业技术学院第四届计算机文化节
程序设计大赛决赛题
提醒:请各队在各自电脑D盘根目录下创建一个命名为“2010程序设计大赛-队名”的文件夹,将所有题目的答案都放到此目录底下。
做题过程中请注意保存。每做完一题就通过电子教室系统提交一次,电脑上没装电子教室软件的每题做完后举手示意工作人员用U盘提交。
}
intcategoryNum=trees.size();
String treeNames[]=newString[categoryNum];
EnumerationE_trees=trees.keys();
inttotal=0;//用来计算总的树木棵树
intindex=0;
while(E_trees.hasMoreElements())
{
if(treeNames[j].compareTo(treeNames[j+1])>0)
{
String temp=treeNames[j];
treeNames[j]=treeNames[j+1];
treeNames[j+1]=temp;
}
}
}
//输出结果
System.out.println("统计结果:");
case0:
z[1] = z[0] + m[2];
a[1] ="("+a[0] +"+"+ m[2]+")";
各题源文件都分别保存在一个单独的文件夹中,文件夹命名为:题号_队名。
第一部分(简单题型):
1、(10分)马克思手稿中有一道趣味数学问题:有30个人,其中有男人、女人和小孩,在一家饭馆吃饭花了50先令;每个男人花3先令,每个女人花2先令,每个小孩花1先令;问男人、女人和小孩各有几人?输出所有可能的组合。
{
count++;
printf(“%2d%10d%10d%10d\n”,count,men,women,children);
}
}
2、(10分)孙悟空在大闹蟠桃园的时候,第一天吃掉了所有桃子总数一半多一个,第二天又将剩下的桃子吃掉一半多一个,以后每天吃掉前一天剩下的一半多一个,到第n天准备吃的时候只剩下一个桃子。这下可把神仙们心疼坏了,请帮忙计算一下,第一天开始吃的时候桃子一共有多少个桃子。
importjava.util.Scanner;
publicclassGreatestCD
{
staticintgcd(inta,intb)
{
if( b==0)
{
returna;
}
else
{
returngcd(b, a % b);
}
}
publicstaticvoidmain(String args[])
}
}
4、(15分)网上流传一句话:"常在网上飘啊,哪能不挨刀啊~"。其实要想能安安心心地上网其实也不难,学点安全知识就可以。
首先,我们就要设置一个安全的密码。那什么样的密码才叫安全的呢?一般来说一个比较安全的密码至少应该满足下面两个条件:
(1).密码长度大于等于8,且不要超过16。
(2).密码中的字符应该来自下面“字符类别”中四组中的至少三组。
{
System.out.println("请输入您要求最大公约数的两个整数:");
Scanner input=newScanner(System.in);
inta=input.nextInt();
intb=input.nextInt();
System.out.println("它们的最大公约数是:"+gcd(a,b));
样例输入:
Red Alder
Ash
Aspen
Basswood
Ash
Beech
Yellow Birch
Ash
Cherry
Cottonwood
Ash
Cypress
Red Elm
Gum
Hackberry
White Oak
Hickory
Pecan
Hard Maple
White Oak
Soft Maple
Red Oak