POJ Grids基本练习题 资料.docx
《POJ Grids基本练习题 资料.docx》由会员分享,可在线阅读,更多相关《POJ Grids基本练习题 资料.docx(134页珍藏版)》请在冰豆网上搜索。
POJGrids基本练习题资料
POJGrids基本练习题资料
POJ——1004FinancialManagement-3-
POJ——1664放苹果-5-
POJ——2675计算书费-7-
POJ——2676整数的个数-9-
POJ——2679整数的立方和-11-
POJ——2680化验诊断-12-
POJ——2684求阶乘的和-15-
POJ——2687数组逆序重放-16-
POJ——2688求字母的个数-17-
POJ——2689大小写字母互换-18-
POJ——2694逆波兰表达式-19-
POJ——2696计算表达式的值-20-
POJ——2699自整除数-22-
POJ——2701与7无关的数-23-
POJ——2702密码翻译-24-
POJ——2703骑车与走路-26-
POJ——2707求一元二次方程的根-27-
POJ——2714求平均年龄-29-
POJ——2715谁拿了最多的奖学金-30-
POJ——2718晶晶赴约会-33-
POJ——2719陶陶摘苹果-34-
POJ——2720大象喝水-35-
POJ——2722学分绩点-36-
POJ——2733判断闰年-38-
POJ——2734十进制到八进制-39-
POJ——2750鸡兔同笼-40-
POJ——2753菲波那契数列-41-
POJ——2758菲波那契数列
(2)-42-
POJ——2764数根-43-
POJ——2767简单密码-45-
POJ——2780Eva’sProblem-48-
POJ——2786Pell数列-49-
POJ——2796数字求和-50-
POJ——2807两倍-51-
POJ——2808校门外的树-53-
POJ——2856计算邮资-55-
POJ——2870求矩阵的加法-57-
POJ——2871整数奇偶排序-59-
POJ——2882ProgramI-61-
POJ——2883checkingorder-63-
POJ——2886能被3除尽的数之和-65-
POJ——2887能被3、5、7整除的数-66-
POJ——2888字符串中的数字-68-
POJ——2926算数运算-70-
POJ——2927判断数字个数-71-
POJ——2930加减乘除-73-
POJ——2933停车场收费-75-
POJ——2938按顺序输出-77-
POJ——2943小白鼠排队-78-
POJ——3142球弹跳高度的计算-80-
POJ——3164奇偶排序-81-
POJ——3195最大公约数-82-
POJ——3248最大公约数-83-
POJ——3255十进制到六进制-85-
POJ——3670计算鞍点-87-
POJ——37081的个数-89-
POJ——3756多边形内角和-91-
POJ——1004FinancialManagement
TimeLimit:
1000ms
Memorylimit:
10000kB
题目描述
Larrygraduatedthisyearandfinallyhasajob.He'smakingalotofmoney,butsomehowneverseemstohaveenough.Larryhasdecidedthatheneedstograbholdofhisfinancialportfolioandsolvehisfinancingproblems.Thefirststepistofigureoutwhat'sbeengoingonwithhismoney.Larryhashisbankaccountstatementsandwantstoseehowmuchmoneyhehas.HelpLarrybywritingaprogramtotakehisclosingbalancefromeachofthepasttwelvemonthsandcalculatehisaverageaccountbalance.
输入
Theinputwillbetwelvelines.Eachlinewillcontaintheclosingbalanceofhisbankaccountforaparticularmonth.Eachnumberwillbepositiveanddisplayedtothepenny.Nodollarsignwillbeincluded.
输出
Theoutputwillbeasinglenumber,theaverage(mean)oftheclosingbalancesforthetwelvemonths.Itwillberoundedtothenearestpenny,precededimmediatelybyadollarsign,andfollowedbytheend-of-line.Therewillbenootherspacesorcharactersintheoutput.
样例输入
100.00
489.12
12454.12
1234.10
823.05
109.20
5.27
1542.25
839.18
83.99
1295.01
1.75
样例输出
$1581.42
GlobalNo.
6
思路:
这道题就是计算一下12个月的平均工资。
代码:
#include
usingnamespacestd;
intmain()
{
doublea[12];
inti;
for(i=0;i<12;i++)
cin>>a[i];
doublesum=0.0;
for(i=0;i<12;i++)
sum+=a[i];
doubleaverage;
average=sum/12;
cout<<"$"<return0;
}
运行结果:
POJ——1664放苹果
TimeLimit:
1000ms
Memorylimit:
65536kB
题目描述
把M个同样的苹果放在N个同样的盘子里,允许有的盘子空着不放,问共有多少种不同的分法?
(用K表示)5,1,1和1,5,1是同一种分法。
输入
第一行是测试数据的数目t(0<=t<=20)。
以下每行均包含二个整数M和N,以空格分开。
1<=M,N<=10。
输出
对输入的每组数据M和N,用一行输出相应的K。
样例输入
1
73
样例输出
8
GlobalNo.
666
解题思路:
所有不同的摆放方法可以分为两类:
至少有一个盘子空着和所有盘子都不空,分别计算这两类摆放方法的数目,然后把他们加起来。
对于至少空着一个盘子的情况,则N个盘子摆放M个苹果的方法数目与N-1个盘子摆放M个苹果的摆放方法数目等于N个盘子摆放M-N个苹果的摆放方法数目。
据此来用递归的方法求解这个问题。
设f(m,n)为m个苹果,n个盘子的放法数目,则先对n进行讨论,如果n>m,必有n-m个盘子空着,去掉他们对白放苹果方法数目不产生影响;即if(n>m),f(m,n)=f(m,m)当n<=m时不同的放法可以分成两类:
即有至少有一个盘子空着或者所有盘子都有苹果,前一种情况相当于f(m,n)=f(m,n-1);后一种情况可以从每个盘子中拿掉一个苹果,不影响不同放法的数目,即有f(m,n)=f(m-n,n)。
总的放苹果的放法数目等于两者的和,即f(m,n)=f(m,n-1)+f(m-n,n)。
整个递归过程描述如下:
intf(intm,intn){
if(n==1||m==0)return1;
if(mreturnf(m,n-1)+f(m-n,n);
}
出口条件说明:
当n=1时,所有苹果必须放在一个盘子里,所以返回1;当苹果可放时,定义1中做法;递归的两条路,第一条n会逐渐减少,终会到达出口“n==1”;第二条m会逐渐减少,因为n>m时会返回f(m,m),所以终会达到出口“m==0”
程序代码:
#include
usingnamespacestd;
intcount(intx,inty){
if(y==1||x==0)return1;
if(xreturncount(x,y-1)+count(x-y,y);
}
intmain()
{
intt,m,n;
cin>>t;
for(inti=0;i{
cin>>m>>n;
cout<}
while
(1);
return0;
}
运行结果:
POJ——2675计算书费
TimeLimit:
1000ms
Memorylimit:
10000kB
题目描述
下面是一个图书的单价表:
计算概论28.9元/本
数据结构与算法32.7元/本
数字逻辑45.6元/本
C++程序设计教程78元/本
人工智能35元/本
计算机体系结构86.2元/本
编译原理27.8元/本
操作系统43元/本
计算机网络56元/本
JAVA程序设计65元/本
给定每种图书购买的数量,编程计算应付的总费用。
输入
输入第一行包含一个正整数k(0每组测试数据包含10个整数(大于等于0,小于等于100),分别表示购买的《计算概论》、《数据结构与算法》、《数字逻辑》、《C++程序设计教程》、《人工智能》、《计算机体系结构》、《编译原理》、《操作系统》、《计算机网络》、《JAVA程序设计》的数量(以本为单位)。
每两个整数用一个空格分开。
输出
对于每组测试数据,输出一行。
该行包含一个浮点数f,表示应付的总费用。
精确到小数点后两位。
可用printf("%.2f\n",sum)来输出sum的值,并精确到小数点后两位。
样例输入
2
15810511234
356310011010
样例输出
2140.20
4427.80
GlobalNo.
1677
SourceCode:
#include
#include
usingnamespacestd;
#defineM100
intmain()
{
intn,i,j,count[10];
doubleprice[10]={28.9,32.7,45.6,78.0,35.0,86.2,27.8,43.0,56.0,65.0};
doublepaid[10],sum;
cin>>n;
for(j=1;j<=n;j++){
sum=0;
for(i=0;i<10;i++){
cin>>count[i];
paid[i]=price[i]*count[i];
sum+=paid[i];
}
cout<:
fixed)<(2)<}
return0;
}
Result:
POJ——2676整数的个数
TimeLimit:
1000ms
Memorylimit:
65536kB
题目描述
给定k(1写程序计算给定的k个正整数中,1,5和10出现的次数。
输入
输入有两行:
第一行包含一个正整数k,第二行包含k个正整数,每两个正整数用一个空格分开。
输出
输出有三行,第一行为1出现的次数,,第二行为5出现的次数,第三行为10出现的次数。
样例输入
5
158105
样例输出
1
2
1
GlobalNo.
1678
SourceCode:
#include
#defineN100
usingnamespacestd;
intmain()
{
intk,i,c1=0,c2=0,c3=0;
cin>>k;
inta[N];
for(i=0;icin>>a[i];
for(i=0;iif(a[i]==1)c1++;
elseif(a[i]==5)c2++;
elseif(a[i]==10)c3++;
}
cout<cout<cout<while
(1);
return0;
}
Result:
POJ——2679整数的立方和
TimeLimit:
1000ms
Memorylimit:
65536kB
题目描述
给定一个正整数k(1即m=1+2*2*2+…+k*k*k。
输入
输入只有一行,该行包含一个正整数k。
输出
输出只有一行,该行包含1到k的立方和。
样例输入
5
样例输出
225
GlobalNo.
1681
ScourseCode:
#include
usingnamespacestd;
intmain()
{
intn,i=2,sum=1;
cin>>n;
while(i<=n){
sum+=i*i*i;
i++;
}
cout<return0;
}
Result:
POJ——2680化验诊断
TimeLimit:
1000ms
Memorylimit:
65536kB
题目描述
下表是进行血常规检验的正常值参考范围,及化验值异常的临床意义:
给定一张化验单,判断其所有指标是否正常,如果不正常,统计有几项不正常。
化验单上的值必须严格落在正常参考值范围内,才算是正常。
正常参考值范围包括边界,即落在边界上也算正常。
输入
输出
对于每组测试数据,输出一行。
如果所有检验项目正常,则输出:
normal;否则输出不正常的项的数目。
样例输入
2
female4.54.011537200
male3.93.515536301
样例输出
normal
3
GlobalNo.1682
SourceCode:
#include
#include
usingnamespacestd;
structInfo
{
stringsex;
floata,b,c,d,e;
};
intmain()
{
Infoinfo[101];
intn,i,k=0;
cin>>n;
while(kintcountN=0,countI=0;
cin>>info[i].sex>>info[i].a>>info[i].b>>info[i].c>>info[i].d>>info[i].e;
if(info[i].sex=="female"){
if(info[i].a<=10.0&&info[i].a>=4.0)
countN++;
else
countI++;
if(info[i].b<=5.5&&info[i].b>=3.5)
countN++;
else
countI++;
if(info[i].c<=150&&info[i].c>=110)
countN++;
else
countI++;
if(info[i].d<=40&&info[i].d>=36)
countN++;
else
countI++;
if(info[i].e<=300&&info[i].e>=100)
countN++;
else
countI++;
if(countN==5)
cout<<"normal"<else
cout<}
else
{
if(info[i].a<=10.0&&info[i].a>=4.0)
countN++;
else
countI++;
if(info[i].b<=5.5&&info[i].b>=3.5)
countN++;
else
countI++;
if(info[i].c<=160&&info[i].c>=120)
countN++;
else
countI++;
if(info[i].d<=48&&info[i].d>=42)
countN++;
else
countI++;
if(info[i].e<=300&&info[i].e>=100)
countN++;
else
countI++;
if(countN==5)
cout<<"normal"<else
cout<}
k++;
}
return0;
}
Result:
POJ——2684求阶乘的和
TimeLimit:
1000ms
Memorylimit:
65536kB
题目描述
求前n(1+2!
+3!
+...+n!
)。
输入
输入有一行:
整数n。
输出
输出有一行:
阶乘得和。
样例输入
5
样例输出
153
GlobalNo.
1686
#include
usingnamespacestd;
longintfunction(intn)
{longinth;
if(n>1)h=n*function(n-1);
elseh=1;
returnh;
}
intmain()
{
intdata,count,sum=0;
cin>>data;
for(count=1;count<=data;count++)
{
sum+=function(count);
}
cout<while
(1);
return0;
}
POJ——2687数组逆序重放
TimeLimit:
1000ms
Memorylimit:
65536kB
题目描述
将一个数组中的值按逆序重新存放。
例如,原来的顺序为8,6,5,4,1。
要求改为1,4,5,6,8。
输入
输入为两行:
第一行数组中元素的个数n(1输出
输出为一行:
输出逆序后数组的整数,每两个整数之间用空格分隔。
样例输入
5
86541
样例输出
14568
GlobalNo.
1689
ScourseCode:
#include
#defineN100
usingnamespacestd;
intmain()
{
intcount,total;
cin>>total;
inta[N];
for(count=0;countcin>>a[count];
for(count=total-1;count>=0;count--)
cout<return0;
}
POJ——2688求字母的个数
TimeLimit:
1000ms
Memorylimit:
65536kB
题目描述
在一个字符串中找出元音字母a,e,i,o,u出现的次数。
输入
输入一行字符串(字符串中可能有空格,请用gets(s)方法把一行字符串输入到字符数组s中),字符串长度小于80个字符。
输出
输出一行,依次输出a,e,i,o,u在输入字符串中出现的次数,整数之间用空格分隔。
样例输入
Ifso,youalreadyhaveaGoogleAccount.Youcansigninontheright.
样例输出
54373
提示
注意,只统计小写元音字母a,e,i,o,u出现的次数。
GlobalNo.
1690
ScourseCode:
#include
#defineN80
usingnamespacestd;
intmain()
{
chartest[N];
intcounta=0,counte=0,counti=0,counto=0,countu=0;
gets(test);
inti;
for(i=0;i='\0';i++){
if(test[i]=='a')counta++;
elseif(test[i]=='e')counte++;
elseif(test[i]=='i')counti++;
elseif(test[i]=='o')counto++;
elseif
(test[i]=='u')countu++;
}
cout<return0;
}
POJ——2689大小写字母互换
TimeLimit:
1000ms
Memorylimit:
65536kB
题目描述
把一个字符串中所有出现的大写字母都替换成小写字母,同