程序设计课程报告2018212824沈园园
 《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://www.huajiangbk.com/newsview465208.html
| 上一篇: UML网上鲜花店订花系统课程设计 | 下一篇: 开满鲜花的校园 ——无锡市东北塘 | 
推荐分享
 
                
                
                
                - 1君子兰什么品种最名贵 十大名 4012
- 2世界上最名贵的10种兰花图片 3364
- 3花圈挽联怎么写? 3286
- 4迷信说家里不能放假花 家里摆 1878
- 5香山红叶什么时候红 1493
- 6花的意思,花的解释,花的拼音 1210
- 7教师节送什么花最合适 1167
- 8勿忘我花图片 1103
- 9橄榄枝的象征意义 1093
- 10洛阳的市花 1039










