《c++程序设计》
课程设计报告
班级:数学4班
学号:2018212824
报告人姓名:沈园园
实验地点:山东农业大学东校区教学楼
完成起止日期:2019.1.1——2019.1.5
1
Problem Description
有一个长度为n(n<=100)的数列,该数列定义为从2开始的递增有序偶数,现在要求你按照顺序每m个数求出一个平均值,如果最后不足m个,则以实际数量求平均值。编程输出该平均值序列。
Input
输入数据有多组,每组占一行,包含两个正整数n和m,n和m的含义如上所述。
Output
对于每组输入数据,输出一个平均值序列,每组输出占一行。
题目思路,输入题目数据,判断可否被m整除,分情况求平均。
#include<iostream>
using namespace std;
int main()
{
int m,n;
while(cin>>n>>m)//循环结构
{
int b=n;
for(int i=2;i<=2*n;i+=2*m)//i的增量是2*m
{
int s=0,a;
if(b/m!=0)//如果b不能被m整除
{
for(int j=i;j<=i+2*(m-1);j+=2)
{
s+=j; //偶数列加和
}
a=s/m; //求平均
cout<<a;
if(b!=m) cout<<" ";
}
if(b/m==0)//如果b能被m整除
{
for(int h=i;h<=i+2*(b-1);h+=2)
{
s+=h;偶数列加和
}
a=s/b;//求平均
cout<<a;
}
b-=m;//b的减量是m
}
cout<<"n";
}
return 0;
}
2
Problem Description
求A^B的最后三位数表示的整数。
说明:A^B的含义是“A的B次方”
Input
输入数据包含多个测试实例,每个实例占一行,由两个正整数A和B组成(1<=A,B<=10000),如果A=0, B=0,则表示输入数据的结束,不做处理。
Output
对于每个测试实例,请输出A^B的最后三位表示的整数,每个输出占一行。
题目思路,输入数据,判断是否为0,符合进入循环程序,取余后三位。
#include<stdio.h>
#include<stdlib.h>
int main()
{
int a,b,i,p;
while(scanf("%d %d",&a,&b)!=EOF)
{
if(a==0&&b==0)
{
break; //a与b其一为0停止循环
}
p=a%1000; //取余后三位
a=1;
for(i=1;i<=b;i++)
{
a=a%1000;
a=a*p; //计算a的b次方
}
printf("%dn",a%1000); //取余后三位
}
return 0;
}
3
Problem Description
妈妈每天都要出去买菜,但是回来后,兜里的钱也懒得数一数,到底花了多少钱真是一笔糊涂帐。现在好了,作为好儿子(女儿)的你可以给她用程序算一下了,呵呵。
Input
输入含有一些数据组,每组数据包括菜种(字串),数量(计量单位不论,一律为double型数)和单价(double型数,表示人民币元数),因此,每组数据的菜价就是数量乘上单价啊。菜种、数量和单价之间都有空格隔开的。
Output
支付菜价的时候,由于最小支付单位是角,所以总是在支付的时候采用四舍五入的方法把分头去掉。最后,请输出一个精度为角的菜价总量。
题目思路,输入菜价和数量,总和为各加和。输出。
#include<iostream>
#include<stdio.h>
using namespace std;
int main()
{
char a[100];
double m,n,k=0;//定义m n
while(cin>>a>>m>>n)
{
k+=m*n;//k为mn乘积的和
}
printf("%.1lfn",k);//输出k保留一位小数
return 0;
}
4
Problem Description
HDOJ上面已经有10来道A+B的题目了,相信这些题目曾经是大家的最爱,希望今天的这个A+B能给大家带来好运,也希望这个题目能唤起大家对ACM曾经的热爱。
这个题目的A和B不是简单的整数,而是两个时间,A和B 都是由3个整数组成,分别表示时分秒,比如,假设A为34 45 56,就表示A所表示的时间是34小时 45分钟 56秒。
Input
输入数据有多行组成,首先是一个整数N,表示测试实例的个数,然后是N行数据,每行有6个整数AH,AM,AS,BH,BM,BS,分别表示时间A和B所对应的时分秒。题目保证所有的数据合法。
Output
对于每个测试实例,输出A+B,每个输出结果也是由时分秒3部分组成,同时也要满足时间的规则(即:分和秒的取值范围在0~59),每个输出占一行,并且所有的部分都可以用32位整数表示。
题目思路,输入时间,对时分秒转化相加,输出时间和。
#include<math.h>
#include<string.h>
#include<time.h>
int h1,m1,s1,h2,m2,s2;
int main()
{
int T;
scanf( "%d" ,&T );//输入T
while( T-- )//每次循环自减一
{
scanf( "%d%d%d%d%d%d" ,&h1,&m1,&s1,&h2,&m2,&s2 );//输入
s1 += s2;
m1 += ( m2 + s1 / 60 );
h1 += ( h2 + m1 / 60 );//时分秒转化加和
printf( "%d %d %dn" , h1 ,m1%60 ,s1%60 );//输出时分秒
}
return 0;
}
5
Problem Description
给你n个整数,求他们中所有奇数的乘积。
Input
输入数据包含多个测试实例,每个测试实例占一行,每行的第一个数为n,表示本组数据一共有n个,接着是n个整数,你可以假设每组数据必定至少存在一个奇数。
Output
输出每组数中的所有奇数的乘积,对于测试实例,输出一行。
题目思路,先输入数组,对数1直接相乘,然后判断数是否可被2整除,即判断奇数,符合值连乘。
#include <iostream>
using namespace std;
int main(){
int n,i,b,c;
int a[1000];
while(cin>>n)
{
c=1;
for(i=1;i<=n;i++)
{cin>>a[i];
if(a[i]==1)
c=c*a[i];//如果a[i]=1,c为a[i]乘积
else
b=a[i]%2;//取余判断b是否为0
if(b!=0)//可以看出a[i]为奇数
c=c*a[i];}//算出乘积
cout<<c<<endl;}
return 0;
}
6
Problem Description
春天是鲜花的季节,水仙花就是其中最迷人的代表,数学上有个水仙花数,他是这样定义的:
“水仙花数”是指一个三位数,它的各位数字的立方和等于其本身,比如:153=1^3+5^3+3^3。
现在要求输出所有在m和n范围内的水仙花数。
Input
输入数据有多组,每组占一行,包括两个整数m和n(100<=m<=n<=999)。
Output
对于每个测试实例,要求输出所有在给定范围内的水仙花数,就是说,输出的水仙花数必须大于等于m,并且小于等于n,如果有多个,则要求从小到大排列在一行内输出,之间用一个空格隔开;
如果给定的范围内不存在水仙花数,则输出no;
每个测试实例的输出占一行。
题目思路,输入循环数,将其拆分,对拆分值验证,符合值输出。
#include <stdio.h>
int f[999];
int main(){
int a,b,c,m,n,t,s,k,j,i;
while(scanf("%d %d",&m,&n))
{
j=0;
for(i=m;i<=n;i++)
{
a=i/100;//百位数
b=(i%100)/10;//十位数
c=i%10;//个位数
if(i==a*a*a+b*b*b+c*c*c)//判断i是否符合水仙花数
{
j++;//数目递增
f[j]=i;
}
}
if(j==0) printf("non");//没有符合的数输出0
else
{
for(k=1;k<=j;k++)
{
if(k==j)printf("%dn",f[j]);
else
printf("%d ",f[k]);//排序
}
}
}
return 0;
}
7
Problem Description
输入一个百分制的成绩t,将其转换成对应的等级,具体转换规则如下:
90~100为A;
80~89为B;
70~79为C;
60~69为D;
0~59为E;
Input
输入数据有多组,每组占一行,由一个整数组成。
Output
对于每组输入数据,输出一行。如果输入数据不在0~100范围内,请输出一行:“Score is error!”。
题目思路,输入成绩,作分数段,输出分数段对应字母即可。
#include<stdio.h>
int main()
{
int a;
while(scanf("%dn",&a)!=EOF)//输入a
{
if(a<=100&&a>=90) printf("An");
if(a<=89&&a>=80) printf("Bn");
if(a>=70&&a<=79) printf("Cn");
if(a<=69&&a>=60) printf("Dn");
if(a>=0&&a<=59) printf("En");//对分数分段分类
if(a<0||a>100) printf("Score is error!n");}//对不在区间的分数输出
return 0;
}
8
Problem Description
杭州人称那些傻乎乎粘嗒嗒的人为62(音:laoer)。
杭州交通管理局经常会扩充一些的士车牌照,新近出来一个好消息,以后上牌照,不再含有不吉利的数字了,这样一来,就可以消除个别的士司机和乘客的心理障碍,更安全地服务大众。
不吉利的数字为所有含有4或62的号码。例如:
62315 73418 88914
都属于不吉利号码。但是,61152虽然含有6和2,但不是62连号,所以不属于不吉利数字之列。
你的任务是,对于每次给出的一个牌照区间号,推断出交管局今次又要实际上给多少辆新的士车上牌照了。
Input
输入的都是整数对n、m(0<n≤m<1000000),如果遇到都是0的整数对,则输入结束。
Output
对于每个整数对,输出一个不含有不吉利数字的统计个数,该数值占一行位置。
题目思路,先将输入数据拆分,对其相邻的数做判断,62连舍去,4舍去,输出符合值即可。
#include <iostream>
using namespace std;
int s[1000000];
int main()
{
s[1000000] = { 0 };
int n, m, i, q, c = 0, z;
for (i = 1; i <=1000000; i++)
{
z = i;
while (z)
{
q = z % 10;//q为z的个位数
z = z / 10;//z为其本身的个位前的数
if (q == 4)
{
c++;//q=4,c本身增1
break;
}
else if ((q == 2) && (z % 10 == 6))
{
c++;//62连号C增1
break;
}
}
s[i] = c;
}
while (cin >> n >> m)
{
if (n == 0 && m == 0)
break;
cout << m - n + 1 - (s[m]-s[n-1]) << endl;//输出符合号码
}
system("pause");
return 0;
}
9
Problem Description
输入n(n<=100)个整数,按照绝对值从大到小排序后输出。题目保证对于每一个测试实例,所有的数的绝对值都不相等。
Input
输入数据有多组,每组占一行,每行的第一个数字为n,接着是n个整数,n=0表示输入数据的结束,不做处理。
Output
对于每个测试实例,输出排序后的结果,两个数之间用一个空格隔开。每个测试实例占一行。
题目思路,输入n个数,比较其绝对值然后排序。
#include<iostream>
#include<cmath>
using namespace std;
int main()
{
int n,i,j,m;
float a[1000];
while(cin>>n)
{
if(n==0)//n=0结束
break;
else
for(i=1;i<=n;i++)
cin>>a[i];
for(i=1;i<=n;i++)
{
for(j=1;j<=n-i;j++)
{
if(abs(a[j])<abs(a[j+1]))//绝对值比较
{
int temp;
temp=a[j];
a[j]=a[j+1];
a[j+1]=temp;//交换排序
}
}
}
for(i=1;i<=n;i++)
{
if(i!=n)
cout<<a[i]<<" ";//两个数之间用空格隔开
else
cout<<a[i];//最后一位不用
}
cout<<endl;
}
}
10
Problem Description
青年歌手大奖赛中,评委会给参赛选手打分。选手得分规则为去掉一个最高分和一个最低分,然后计算平均得分,请编程输出某选手的得分。
Input
输入数据有多组,每组占一行,每行的第一个数是n(2<n<=100),表示评委的人数,然后是n个评委的打分。
Output
对于每组输入数据,输出选手的得分,结果保留2位小数,每组输出占一行。
题目思路,定义输入最大最小值,sum减去即得总分,在除以人数减去2即可。
#include<stdio.h>
int main()
{
int n,i;double s,x,max,min;
while(~scanf("%d",&n))
{
scanf("%lf",&x);//输入x
s=max=min=x;//给最大最小值赋值
for(i=1;i<n;++i)
{
scanf("%lf",&x);
s+=x;//s为分数加和
max=(x>max)?x:max;//三目运算判断最大最小值
min=(x<min)?x:min;
}
printf("%.2lfn",(s-max-min)/(n-2));//加和减去最大最小值求平均
}
return 0;
}
11
Problem Description
第一天悟空吃掉桃子总数一半多一个,第二天又将剩下的桃子吃掉一半多一个,以后每天吃掉前一天剩下的一半多一个,到第n天准备吃的时候只剩下一个桃子。聪明的你,请帮悟空算一下,他第一天开始吃的时候桃子一共有多少个呢?
Input
输入数据有多组,每组占一行,包含一个正整数n(1<n<30),表示只剩下一个桃子的时候是在第n天发生的。
Output
对于每组输入数据,输出第一天开始吃的时候桃子的总数,每个测试实例占一行。
题目思路,用最后桃子每次加一乘以二即得到最后数目
#include<stdio.h>
int main()
{
int n,m,i;
while(scanf("%d",&n)!=EOF)//输入n
{
m=1;//最后剩余的一个
for(i=0;i<n-1;i++)
{
m=(m+1)*2;//在n次循环后,每次m+1再乘以2
}
printf("%dn",m);//输出m
}
}
12
Problem Description
据说在很久很久以前,可怜的兔子经历了人生中最大的打击——赛跑输给乌龟后,心中郁闷,发誓要报仇雪恨,于是躲进了杭州下沙某农业园卧薪尝胆潜心修炼,终于练成了绝技,能够毫不休息得以恒定的速度(VR m/s)一直跑。兔子一直想找机会好好得教训一下乌龟,以雪前耻。
最近正值HDU举办50周年校庆,社会各大名流齐聚下沙,兔子也趁此机会向乌龟发起挑战。虽然乌龟深知获胜希望不大,不过迫于舆论压力,只能接受挑战。
比赛是设在一条笔直的道路上,长度为L米,规则很简单,谁先到达终点谁就算获胜。
无奈乌龟自从上次获胜以后,成了名龟,被一些八卦杂志称为“动物界的刘翔”,广告不断,手头也有了不少积蓄。为了能够再赢兔子,乌龟不惜花下血本买了最先进的武器——“"小飞鸽"牌电动车。这辆车在有电的情况下能够以VT1 m/s的速度“飞驰”,可惜电池容量有限,每次充满电最多只能行驶C米的距离,以后就只能用脚来蹬了,乌龟用脚蹬时的速度为VT2 m/s。更过分的是,乌龟竟然在跑道上修建了很多很多(N个)的供电站,供自己给电动车充电。其中,每次充电需要花费T秒钟的时间。当然,乌龟经过一个充电站的时候可以选择去或不去充电。
比赛马上开始了,兔子和带着充满电的电动车的乌龟并列站在起跑线上。你的任务就是写个程序,判断乌龟用最佳的方案进军时,能不能赢了一直以恒定速度奔跑的兔子。
Input
本题目包含多组测试,请处理到文件结束。每个测试包括四行:
第一行是一个整数L代表跑道的总长度
第二行包含三个整数N,C,T,分别表示充电站的个数,电动车冲满电以后能行驶的距离以及每次充电所需要的时间
第三行也是三个整数VR,VT1,VT2,分别表示兔子跑步的速度,乌龟开电动车的速度,乌龟脚蹬电动车的速度
第四行包含了N(N<=100)个整数p1,p2...pn,分别表示各个充电站离跑道起点的距离,其中0<p1<p2<...<pn<L
其中每个数都在32位整型范围之内。
Output
当乌龟有可能赢的时候输出一行 “What a pity rabbit!"。否则输出一行"Good job,rabbit!";
题目数据保证不会出现乌龟和兔子同时到达的情况。
#include <iostream>
using namespace std;
int path[102];
double dp[102];
int main()
{
int L,N,C,T,vr,vt1,vt2;
while(cin>>L)
{
cin>>N>>C>>T;
cin>>vr>>vt1>>vt2;
for(int i=1;i<=N;++i)
cin>>path[i];
path[0]=0;path[N+1]=L;//每个充电站看作一个节点,把起点和终点也看作节点
dp[0]=0;//初始化一些,下面要用到
for(int i=1;i<=N+1;i++)
{
double min=1000000;//从第J到第I个充电站的最短时间
for(int j=0;j<i;++j)
{
double temp;//temp是指从起点到节点i所用的时间
if(path[i]-path[j]>=C)//从节点j到节点i的距离大于等于C的话
temp=dp[j]+C*1.0/vt1+(path[i]-path[j]-C)*1.0/vt2; //时间是起点到节点j加上从j到i这一段所用的时间(分为两部分)
else
temp=dp[j]+(path[i]-path[j])*1.0/vt1;
if(j>0)
temp+=T;//在节点j充电的时间,计算的时候看作每次都是在节点j充满电再走向节点i
if(temp<min)
min=temp;//取最小时间
}
dp[i]=min;
}
double rt;
rt=L*1.0/vr;//兔子用的时间
if(dp[N+1]<rt)
cout<<"What a pity rabbit!"<<endl;
else
cout<<"Good job,rabbit!"<<endl;
}
return 0;
}
13
Problem Description
有一只经过训练的蜜蜂只能爬向右侧相邻的蜂房,不能反向爬行。请编程计算蜜蜂从蜂房a爬到蜂房b的可能路线数。
其中,蜂房的结构如下所示。
Input
输入数据的第一行是一个整数N,表示测试实例的个数,然后是N 行数据,每行包含两个整数a和b(0<a<b<50)。
Output
对于每个测试实例,请输出蜜蜂从蜂房a爬到蜂房b的可能路线数,每个实例的输出占一行。
#include<iostream>
using namespace std;
int main()
{
int i,m,j,k;
long long a,b,temp;//temp作为交换的工具
cin>>m;
for(i=0; i<m; i++)
{
a=1,b=0;
cin>>j>>k;
for(int t=0; t<=k-j; t++)
{
temp=b;
b=a+b;
a=temp;//a与b交换,b=a+b
}
cout<<b<<endl;
}
return 0;
}
14
Problem Description
有一楼梯共M级,刚开始时你在第一级,若每次只能跨上一级或二级,要走上第M级,共有多少种走法?
Input
输入数据首先包含一个整数N,表示测试实例的个数,然后是N行数据,每行包含一个整数M(1<=M<=40),表示楼梯的级数。
Output
对于每个测试实例,请输出不同走法的数量
题目思路,先输入数组,对上楼梯个数定义,统计总加和为楼梯数的方法。
#include<iostream>
using namespace std;
int main()
{
int M,N,i,a[10000];
cin>>N;
while(N--)//N的减量为1
{
cin>>M;
a[1]=1;a[2]=1;//设置每次上楼梯数
for(i=3;i<=M;i++)
a[i]=a[i-1]+a[i-2];//对总方法统计
cout<<a[M]<<endl;//输出
}
return 0;
}
15
简要题意:
对于表达式n^2+n+41,当n在(x,y)范围内取整数值时(包括x,y)(-39<=x<y<=50),判定该表达式的值是否都为素数。输入数据有多组,当x=0,y=0时,表示输入结束,该行不做处理。对于每个给定范围内的取值,如果表达式的值都为素数,则输出"OK",否则请输出“Sorry”,每组输出占一行。
解题思路:
当给定x与y的值时,我们可以依次判断表达式的值是否为素数。定义一个布尔型变量,若有一个数不为素数则取反。从而得到结果。
#include<stdio.h>
int main()
{
int x,y,n,z,i;//定义
while(scanf("%d %d",&x,&y)!=EOF)//输入
{
if(x==0&&y==0)//判断xy是否为0
break;
int flag=1;
for(n=x;n<=y;n++)//for结构循环
{
z=n*n+n+41;//赋值z
for(i=2;i<=z/2;i++)
{
if(z%i==0)//z可被整除时
flag=0;
}
}
if(flag)
printf("OKn");//输出
else printf("Sorryn");//否则输出
}
}
程序设计课程总结
通过三天的程序设计课程,使我对编程有了更深层次的学习,并对以前的程序漏洞有所弥补。通过这三天的程序设计题目作业,我对编代码掌握程度加深,不过还是有缺陷。这15个题目是自己通过编译提交成功,然后写出的写题过程,这其中不乏参考同学讲解和其他文献知识,但这帮助对编代码能力的提升起了很大作用。总结来说,程序设计课程还算成功,收获满满。
相关知识
沈园健康照护部丨园艺疗愈之“认领一束花”植树节特别活动
立体化课程
果树栽培学课程实习报告
花卉欣赏课程实施计划.docx
《花卉栽培与花卉鉴赏》课程实施纲要
杭电信工计算机系编程比赛集训队,程序设计竞赛集训队
计算机培训有什么课程?
园艺界又纳新宠?“园艺疗法园”怎么玩?
2023年汉江师范学院普通专升本《C语言程序设计》考试大纲
第五届青少年信息学程序设计展示活动获奖查询
网址: 程序设计课程报告2018212824沈园园 https://m.huajiangbk.com/newsview465208.html
上一篇: UML网上鲜花店订花系统课程设计 |
下一篇: 开满鲜花的校园 ——无锡市东北塘 |