北京航空航天大学2014第二次上机解题报告
2014-10-26 15:47
169 查看
2014第二次上机解题报告:
第一题:jhljx上小学
ProblemDescription
jhljx是一个特别喜欢数学的人,精通初等数学以上的各种数学,各种积分他都很精通。。
但他唯一的缺陷就是不会算加减法。。
于是,他只能默默的回去上小学了。。Orz。。他的小学老师是LuxakyLuee。
LuxakyLuee知道这件事以后说这是病,得治啊。。
LuxakyLuee不让他做普通的加减法,因为对于特殊病人要采取特殊手段治疗吖。
LuxakyLuee给了jhljx一个数,然后让他把这个数的每一位加起来。
如果加起来的和的位数多于1位的话,就继续将这个数的每一位数字加起来,直到最后只有一个为止。
这样jhljx就能进行好多次加法运算了。他表示很开心。
Input
输入一组数据。
该组数据只有一行,为一个整数n。
(保证33.33%的n在int范围内,33.33%的n在long
long范围内,33.33%的n超过long
long范围)
Output
输出最后所得的结果。
SampleInput
987
SampleOutput
6
Hint
样例解释:对于987,将每一位加起来就是9+8+7=24,24不是1位数,继续加,2+4=6。咦?变成一位数了。。好神奇吖!!
这道题可以说是本次上机难度最大的一道了。。。不过中途好心的刘京欣学长竟然给它讲了!所以说。。。算法不出自本人感到十分惭愧,具体解法不必再说了。。。将自己代码贴在上面啦~~~
#include<iostream>
#include<cstdio>
usingnamespacestd;
intmain()
{
intt,i,j,n;
charc;
longlongx;
x=0;
//cin>>c;
c=getchar();
while(c!='\n')
{
//cout<<c;
intnum=int(c)-int('0');
x=(x*10+num)%9;
c=getchar();
}
cout<<x<<endl;
}
总之是。。。第一题就这么水过了。。。
有人chaofeng他乘法肯定学不好,他好桑心啊。。
他决定表现给你们看。。可惜就像球球学姐学减肥一样,jhljx学乘法最终还是失败了。。
Last_Day给了jhljx两个数n和m,他让jhljx判断n的m次方的末尾数字是多少。
可是jhljx真的算不出来吖,他就把这个算数的活交给你了。。聪明的你快来帮帮他吧。
每组数据有两个非负整数n和m。(保证n和m在long
long范围内)
1
初中时候就被老师要求对每一个个位数的次方末尾规律记了下,没想到在这里竟然用的上
注意的一:很多同学忘记了0的0次方是不存在的~;
注意的二:很多同学忘记了除了0之外的数的0次方是1
于是。。。贴代码
看上去就有点长,不过大都是复制粘贴的,所以怎么说呢。。。我再一次写麻烦了。。。
jhljx从地球出发,坐着宇宙飞船飞到各种神奇的星球去。。
他去过好多星球,比如说神马火星吖,金星吖,这些都随随便便。
他还去了一趟KMT184.05行星,见到了《来自星星的你》中的都教授。。
jhljx旅行归来,感慨万千啊。。
但他一直不知道自己最远到达了那个星球。
所以他想算一算。但他算数拙计啊。。
那么问题来了。。。
假设地球的坐标是x0,y0,z0,jhljx总共访问了n个星球,n个星球的坐标为x,y,z。
每次访问他都从地球出发,然后访问一个星球,再返回地球。
接着再从地球出发,去访问下一个星球,再返回地球。。。。
在飞行过程中,飞船每飞行1光年需要耗油k升。
请问在这n次飞行中,飞船耗油最多的一次是哪一次,这次飞行消耗了多少油。(假设飞船都能够到达星球,不考虑没油的情况)。
每组数据共(n+3)行。第一行为地球的坐标x0,y0,z0。(x0,y0,z0均为整数,且-1000<=x0,y0,z0<=1000)
第二行为访问的星球个数n。(1<=n<=100)
下面从第三行到第(n+2)行为jhljx要访问的星球的坐标x,y,z。(x,y,z均为整数,且-1000<=x0,y0,z0<=1000)
第(n+3)行为飞船每飞行1光年消耗的油量k。(k为整数,且1<=k<=100)
如果有多次飞行都满足耗油量最大,请输出序号最少的那一次。
1
111
1
这道题就和当时去年的“亿万星辰”很像,算法也十分相似,看到了去年那道题后就感觉这道题基本不是很用想了,不过为了不超时,我还是用了数组。
贴呀嘛贴代码~~:
为了防止饿出狗命来,Last_Day机智的准备了一些狗粮(#)
作为强迫症,Last_Day决定把狗粮摆放的整齐大方。比如倒三角形。
Last_Day手残不会摆,是时候你上场了。
每组数据只有一行,为一个正整数n(n<=30)。
3
代码~
这个题开始竟然还错了两次,后来发现:我把“#”看成了“*”!!!!(后来发现,不只有我一个有这种比较二的错误啊~)
取一个数字,如n=6,根据上述公式,得出
6→3→10→5→16→8→4→2→1。
现在给你一个n,请输出变换到1需要的变换的次数。
每行一个正整数n,n<=1000000000。
看到这个题,结合第一题的题目描述,第一直觉是这也是一道高精度的题,于是就决定最后做,结果没想到这竟然不是,所以最后在编了代码却交不上的时候只能追悔莫及。。。了。。。
说多都是泪啊。。。
这个题。。。要是这样的话。。。貌似比第四题还简单。。
digitalinvariant,PPDI)、自恋数、自幂数、阿姆斯壮数或阿姆斯特朗数(Armstrongnumber),用来描述一个N位非负整数,其各个位数字的N次方和等于该数本身。例如153=1*1*1+5*5*5+3*3*3,则153为pluperfectdigital
invariant。
现给定区间[a,b],请输出[a,b]间pluperfectdigital
invariant。
接下来T行,每行两个数字a,b。(100<=a<=b<=999)
digitalinvariant,从小到大输出,每两个数字之间用一个空格隔开。若区间内不存在pluperfectdigitalinvariant请输出-1。
153153
水仙花数问题:貌似水仙花数问题是属于算法中比较经典的一类问题,再加上上周的练习赛L*题,让我感到还是比较熟悉吧。
代码走起~~~
这个题额。。。简单之处就在于连位数都已经确定了,所以说。。。难度基本给拿掉了
不过还是很感谢学长能在上机题里有难有易的出题,这样真的很有提高,也为你们这么多天一直有问必答,有邮件必回而感到感谢~谢谢啦
2014第二次上机解题报告:
第一题:jhljx上小学
ProblemDescription
jhljx是一个特别喜欢数学的人,精通初等数学以上的各种数学,各种积分他都很精通。。
但他唯一的缺陷就是不会算加减法。。
于是,他只能默默的回去上小学了。。Orz。。他的小学老师是LuxakyLuee。
LuxakyLuee知道这件事以后说这是病,得治啊。。
LuxakyLuee不让他做普通的加减法,因为对于特殊病人要采取特殊手段治疗吖。
LuxakyLuee给了jhljx一个数,然后让他把这个数的每一位加起来。
如果加起来的和的位数多于1位的话,就继续将这个数的每一位数字加起来,直到最后只有一个为止。
这样jhljx就能进行好多次加法运算了。他表示很开心。
Input
输入一组数据。
该组数据只有一行,为一个整数n。
(保证33.33%的n在int范围内,33.33%的n在long
long范围内,33.33%的n超过long
long范围)
Output
输出最后所得的结果。
SampleInput
987
SampleOutput
6
Hint
样例解释:对于987,将每一位加起来就是9+8+7=24,24不是1位数,继续加,2+4=6。咦?变成一位数了。。好神奇吖!!
这道题可以说是本次上机难度最大的一道了。。。不过中途好心的刘京欣学长竟然给它讲了!所以说。。。算法不出自本人感到十分惭愧,具体解法不必再说了。。。将自己代码贴在上面啦~~~
#include<iostream>
#include<cstdio>
usingnamespacestd;
intmain()
{
intt,i,j,n;
charc;
longlongx;
x=0;
//cin>>c;
c=getchar();
while(c!='\n')
{
//cout<<c;
intnum=int(c)-int('0');
x=(x*10+num)%9;
c=getchar();
}
cout<<x<<endl;
}
总之是。。。第一题就这么水过了。。。
第二题:jhljx上中学
ProblemDescription
Last_Day教完jhljx加减法以后,jhljx的算数水平有了很大的长进。现在他从小学升入了中学,准备学习乘除法了。。有人chaofeng他乘法肯定学不好,他好桑心啊。。
他决定表现给你们看。。可惜就像球球学姐学减肥一样,jhljx学乘法最终还是失败了。。
Last_Day给了jhljx两个数n和m,他让jhljx判断n的m次方的末尾数字是多少。
可是jhljx真的算不出来吖,他就把这个算数的活交给你了。。聪明的你快来帮帮他吧。
Input
输入多组数据。每组数据有两个非负整数n和m。(保证n和m在long
long范围内)
Output
输出n的m次方的末尾数字。如果结果不存在,输出-1。SampleInput
21
SampleOutput
2初中时候就被老师要求对每一个个位数的次方末尾规律记了下,没想到在这里竟然用的上
注意的一:很多同学忘记了0的0次方是不存在的~;
注意的二:很多同学忘记了除了0之外的数的0次方是1
于是。。。贴代码
#include<iostream>
usingnamespacestd;
intmain()
{
longlongn,m;
while(cin>>n>>m)
{
if(n==0&&m==0)
{
cout<<"-1"<<endl;
}
elseif(n!=0&&m==0)
{
cout<<"1"<<endl;
}
else
{
n=n-n/10*10;
longlongt;
t=m%4;
switch(t)
{case1:
switch(n)
{case1:
cout<<"1"<<endl;
break;
case2:
cout<<"2"<<endl;
break;
case3:
cout<<"3"<<endl;
break;
case4:
cout<<"4"<<endl;
break;
case5:
cout<<"5"<<endl;
break;
case6:
cout<<"6"<<endl;
break;
case7:
cout<<"7"<<endl;
break;
case8:
cout<<"8"<<endl;
break;
case9:
cout<<"9"<<endl;
break;
case0:
cout<<"0"<<endl;
break;}
break;
case2:
switch(n)
{case1:
cout<<"1"<<endl;
break;
case2:
cout<<"4"<<endl;
break;
case3:
cout<<"9"<<endl;
break;
case4:
cout<<"6"<<endl;
break;
case5:
cout<<"5"<<endl;
break;
case6:
cout<<"6"<<endl;
break;
case7:
cout<<"9"<<endl;
break;
case8:
cout<<"4"<<endl;
break;
case9:
cout<<"1"<<endl;
break;
case0:
cout<<"0"<<endl;
break;}
break;
case3:
switch(n)
{case1:
cout<<"1"<<endl;
break;
case2:
cout<<"8"<<endl;
break;
case3:
cout<<"7"<<endl;
break;
case4:
cout<<"4"<<endl;
break;
case5:
cout<<"5"<<endl;
break;
case6:
cout<<"6"<<endl;
break;
case7:
cout<<"3"<<endl;
break;
case8:
cout<<"2"<<endl;
break;
case9:
cout<<"9"<<endl;
break;
case0:
cout<<"0"<<endl;
break;}
break;
case0:
switch(n)
{case1:
cout<<"1"<<endl;
break;
case2:
cout<<"6"<<endl;
break;
case3:
cout<<"1"<<endl;
break;
case4:
cout<<"6"<<endl;
break;
case5:
cout<<"5"<<endl;
break;
case6:
cout<<"6"<<endl;
break;
case7:
cout<<"1"<<endl;
break;
case8:
cout<<"6"<<endl;
break;
case9:
cout<<"1"<<endl;
break;
case0:
cout<<"0"<<endl;
break;}
break;
}
}
}
}
看上去就有点长,不过大都是复制粘贴的,所以怎么说呢。。。我再一次写麻烦了。。。
第三题:jhljx去太空
ProblemDescription
jhljx是一个特别喜欢旅行的人。。一天他做梦梦到自己去太空旅行了。。o(≧v≦)o~~好棒吖。。jhljx从地球出发,坐着宇宙飞船飞到各种神奇的星球去。。
他去过好多星球,比如说神马火星吖,金星吖,这些都随随便便。
他还去了一趟KMT184.05行星,见到了《来自星星的你》中的都教授。。
jhljx旅行归来,感慨万千啊。。
但他一直不知道自己最远到达了那个星球。
所以他想算一算。但他算数拙计啊。。
那么问题来了。。。
假设地球的坐标是x0,y0,z0,jhljx总共访问了n个星球,n个星球的坐标为x,y,z。
每次访问他都从地球出发,然后访问一个星球,再返回地球。
接着再从地球出发,去访问下一个星球,再返回地球。。。。
在飞行过程中,飞船每飞行1光年需要耗油k升。
请问在这n次飞行中,飞船耗油最多的一次是哪一次,这次飞行消耗了多少油。(假设飞船都能够到达星球,不考虑没油的情况)。
Input
输入多组数据。每组数据共(n+3)行。第一行为地球的坐标x0,y0,z0。(x0,y0,z0均为整数,且-1000<=x0,y0,z0<=1000)
第二行为访问的星球个数n。(1<=n<=100)
下面从第三行到第(n+2)行为jhljx要访问的星球的坐标x,y,z。(x,y,z均为整数,且-1000<=x0,y0,z0<=1000)
第(n+3)行为飞船每飞行1光年消耗的油量k。(k为整数,且1<=k<=100)
Output
输出飞船在这n次旅行中,耗油最多的一次飞行和这次飞行消耗的油量,两个数之间用空格隔开,油量的结果保留6位小数。如果有多次飞行都满足耗油量最大,请输出序号最少的那一次。
SampleInput
0001
111
1
SampleOutput
13.464102Hint
请用C++的输出格式输出结果,否则本题不记成绩。这道题就和当时去年的“亿万星辰”很像,算法也十分相似,看到了去年那道题后就感觉这道题基本不是很用想了,不过为了不超时,我还是用了数组。
贴呀嘛贴代码~~:
#include<iostream>
#include<cmath>
#include<iomanip>
usingnamespacestd;
intmain()
{
longlongx0,y0,z0,x,y,z,n,k,m,i;
while(cin>>x0>>y0>>z0>>n)
{
doubles[n+1];
m=0;
s[0]=0;
for(i=1;i<=n;i++)
{
cin>>x>>y>>z;
s[i]=sqrt((x-x0)*(x-x0)+(y-y0)*(y-y0)+(z-z0)*(z-z0));
if(s[i]>s[m])
{
m=i;
}
}
cin>>k;
//cout<<k;
cout<<m<<""<<setiosflags(ios::fixed)<<setprecision(6)<<k*2*s[m]<<endl;
}
}
第四题:lastDay’dog
ProblemDescription
Last_Day要去西安了。但是Last_Day的狗狗被禁止带上火车。为了防止饿出狗命来,Last_Day机智的准备了一些狗粮(#)
作为强迫症,Last_Day决定把狗粮摆放的整齐大方。比如倒三角形。
Last_Day手残不会摆,是时候你上场了。
Input
输入多组数据。每组数据只有一行,为一个正整数n(n<=30)。
Output
每组数据输出n行,为n层的倒三角形SampleInput
23
SampleOutput
###
#
#####
###
#
由于战术的原因吧,我在看完了所有题之后才开始做,于是先挑了个软柿子捏,也就是先做的这一道,事实证明我的战术还是对的,毕竟把4,5,6这样的题A了之后心里踏实不少~~~~
代码~
#include<iostream>
usingnamespacestd;
intmain()
{
intn;
while(cin>>n)
{
for(inti=n;i>0;i--)
{
for(intj=1;j<=2*n-1;j++)
{
if(j<=n-i||j>=n+i)
{
cout<<"";
}
else
{
cout<<"#";
}
}
cout<<endl;
}
}
}
这个题开始竟然还错了两次,后来发现:我把“#”看成了“*”!!!!(后来发现,不只有我一个有这种比较二的错误啊~)
第五题:CollatzConjecture
ProblemDescription
奇偶归一猜想(CollatzConjecture),又称为3n+1猜想、冰雹猜想、角谷猜想、哈塞猜想、乌拉姆猜想或叙拉古猜想,是指对于每一个正整数,如果它是奇数,则对它乘3再加1,如果它是偶数,则对它除以2,如此循环,最终都能够得到1。取一个数字,如n=6,根据上述公式,得出
6→3→10→5→16→8→4→2→1。
现在给你一个n,请输出变换到1需要的变换的次数。
Input
多组数据输入。每行一个正整数n,n<=1000000000。
Output
每组数据输出一行,为一个整数t,即需要变换的次数。SampleInput
6SampleOutput
8Hint
此题数据范围较大,下手请慎重。看到这个题,结合第一题的题目描述,第一直觉是这也是一道高精度的题,于是就决定最后做,结果没想到这竟然不是,所以最后在编了代码却交不上的时候只能追悔莫及。。。了。。。
说多都是泪啊。。。
#include<iostream>
usingnamespacestd;
intmain()
{
longlongn,t;
while(cin>>n)
{
t=0;
while(n!=1)
{
if(n%2!=0)
{
n=3*n+1;
t++;
}
else
{
n=n/2;
t++;
}
}
cout<<t<<endl;
}
}
这个题。。。要是这样的话。。。貌似比第四题还简单。。
第六题:pluperfectdigitalinvariant
ProblemDescription
在数论中,水仙花数(Narcissisticnumber),也被称为超完全数字不变数(pluperfectdigitalinvariant,PPDI)、自恋数、自幂数、阿姆斯壮数或阿姆斯特朗数(Armstrongnumber),用来描述一个N位非负整数,其各个位数字的N次方和等于该数本身。例如153=1*1*1+5*5*5+3*3*3,则153为pluperfectdigital
invariant。
现给定区间[a,b],请输出[a,b]间pluperfectdigital
invariant。
Input
第一行为数据组数T。(T<10)接下来T行,每行两个数字a,b。(100<=a<=b<=999)
Output
每组数据输出一行,为[a,b]间pluperfectdigitalinvariant,从小到大输出,每两个数字之间用一个空格隔开。若区间内不存在pluperfectdigitalinvariant请输出-1。
SampleInput
1153153
SampleOutput
153Hint
请不要使用打表的方式水掉本题orzorz,否则不计本题成绩,助教会检查代码……水仙花数问题:貌似水仙花数问题是属于算法中比较经典的一类问题,再加上上周的练习赛L*题,让我感到还是比较熟悉吧。
代码走起~~~
#include<iostream>
usingnamespacestd;
intmain()
{
intT,a,b;
cin>>T;
for(;T>0;T--)
{
intx,t;
cin>>a>>b;
x=a;
intcounter=0;
for(;x<=b;x++)
{
intsum=0,q;
q=x;
for(inti=1;i<=3;i++)
{
t=q-q/10*10;
sum=t*t*t+sum;
q=q/10;
}
if(sum==x)
{
cout<<sum<<"";
counter++;
}
}
if(counter==0)
{
cout<<"-1";
}
cout<<endl;
}
}
这个题额。。。简单之处就在于连位数都已经确定了,所以说。。。难度基本给拿掉了
不过还是很感谢学长能在上机题里有难有易的出题,这样真的很有提高,也为你们这么多天一直有问必答,有邮件必回而感到感谢~谢谢啦
相关文章推荐
- 北京航空航天大学2014第六次上机解题报告
- 北京航空航天大学2014第三次上机解题报告
- 北京航空航天大学2014第五次上机解题报告
- 北京航空航天大学2014第四次上机解题报告
- 16级C++第二次上机解题报告
- 第二次上机赛解题报告及标程
- 北京航空航天大学 2008年复试上机题 解题报告
- 北京航空航天大学 2009年复试上机题 解题报告
- 2016级计算机C++助教工作(12) 第二次上机解题报告
- 北京航空航天大学 2012年复试上机题 解题报告
- 【作业解答】第二次上机作业解题报告
- 15级算法第二次上机解题报告
- 西南交大2011年第二次暑期集训比赛解题报告
- 2014-2015 HHUC 跨年二分专题 解题报告
- BZOJ3505: [Cqoi2014]数三角形 解题报告
- 第二次上机实验报告
- 2016级数据结构第一次上机解题报告
- ZOJ Monthly, June 2014 解题报告
- hdoj-2014-青年歌手大奖赛_评委会打分(解题报告)
- 2014百度之星初赛第一轮解题报告:grids