课程设计总结

Problem A

1.题目:输入一个百分制的成绩t,将其转换成对应的等级,具体转换规则如下:
90~100A;80~89B;70~79C;60~69D;0~59E;

输入数据有多组,每组占一行,由一个整数组成。

对于每组输入数据,输出一行。如果输入数据不在0~100范围内,请输出一行:“Score is error!”

2.解题思路:按题目要求用分支语句,将成绩分类

3源代码“

#include<iostream>

#include <cstdio>

using namespace std;

int main()

{

    int score;

    while(cin>>score)                     //多组输入

    if (score>=90 && score <= 100)      //分支语句分类

        printf("A\n");                     //按题目要求换行操作

    else if (score>=80 && score < 90)

        printf("B\n");

    else if (score>=70 && score < 80)

        printf("C\n");

    else if (score>=60 && score < 70)

        printf("D\n");

    else if (score>=0 && score < 60)

        printf("E\n");

    else printf("Score is error!\n");

    return 0;

}

Problem B

1.题目:多组输入两数,输出从小到大区间(包括边界)中的水仙花数。

2.思路:循环遍历,分离各位数,输出满足条件的数据。

3.注意事项:在最后一个数据后边不能有空格,否则会PE。应将最后一个数据单独处理。

4.源代码:

#include<iostream>

#include<cstdio>

using namespace std;

int p[1001];                  //用来储存符合条件的数据

int main(){

    int b=0,c=0,d=0,m,n,s=0;

while(cin>>m>>n)

{

        s=0;                     //在下组数据操作前重置数组下标

        for(int a=m;a<=n;a++){

            b=a/100;             //分离各位数

            c=a/10%10;

            d=a%10;

        if(a==b*b*b+c*c*c+d*d*d)

                p[++s]=a;

        }

        if(s==0)cout<<"no"<<endl;

        else

        for(int i=1;i<=s;i++){

            if (i==s)cout<<p[i]<<endl; //单独处理最后一个数据

            else cout<<p[i]<<" ";

        }

    }

    return 0;

}

Problem C

  1. 题目:给你n个整数,求他们中所有奇数的乘积。
  2. 思路:判断奇偶,符合条件相乘。
  3. 注意事项:初始化乘积为1
  4. 源代码:

#include <iostream>

using namespace std;

int main()

{

    int n,a[1000],i,s;

while(cin>>n)

{

    s=1;

    for(i=1;i<=n;i++)

        cin>>a[i];

    for(i=1;i<=n;i++)

        if(a[i]%2==1)

        s*=a[i];

        cout<<s;

        cout<<endl;

}

    return 0;

}

Problem D

  1. 题目:对于表达式n^2+n+41,当n在(x,y)范围内取整数值时(包括x,y)(-39<=x<y<=50),判定该表达式的值是否都为素数。
  2. 思路:核心在于判断素数,可用循环不整除的方法判断。
  3. 源代码:

#include <iostream>

#include<cstdio>

using namespace std;

int a[11000];

int main()

{

int b,c,e,i,m,n,j;

while(cin>>m>>n)

{

c=0;

if(m==0&&n==0) return 0;

else{

      j=0;

      for(i=m;i<=n;i++)

        {

            j++;

            a[j]=i*i+i+41;

        }

      for(i=1;i<=j;i++)

{

for(b=2;b*b<=a[i];b++)     //判断素数

           {

if(a[i]%b==0)

c++;

}

}

if(c==0) printf("OK\n");

if(c!=0) printf("Sorry\n");

}

}

return 0;

}

Problem E

  1. 题目:去掉一个最高分和一个最低分,然后计算平均得分
  2. 思路:用sort排序,将第二个至倒数第二个数加起来取平均
  3. 源代码:

#include<iostream>

#include<cstdio>

#include<algorithm>           //sort排序头文件

using namespace std;

int main()

{

    int n,a[101],i;

    double s=0;

    while(cin>>n){

    for(i=0;i<n;i++)

    cin>>a[i];

    sort(a,a+n);            //sort排序

    for(i=1;i<n-1;i++)      

    s+=a[i];               //2到n-1求和

        printf("%.2lf\n",1.0*s/(n-2));

    s=0;                  //和清零

        }

}

Problem I

1.题目:输入n(n<=100)个整数,按照绝对值从大到小排序后输出。

2.思路:冒泡排序,通过平方的大小来比较绝对值的大小

3.源代码:

#include <iostream>

using namespace std;

int main()

{

    int a[100],i,j,t,n;

    while(cin>>n)

    {

    if(n==0)

    return 0;

else

{

        for(i=0; i<n; i++)

            cin>>a[i];

        for(j=0; j<n; j++)                  //冒泡排序

            for(i=0; i<n-1-j; i++)

                if(a[i]*a[i]<a[i+1]*a[i+1])

                {

                    t=a[i];

                    a[i]=a[i+1];

                    a[i+1]=t;

                }

        for(i=0; i<n-1; i++)

           cout<<a[i]<<" ";

           cout<<a[n-1]<<endl;           //最后一项特殊处理

}

}

    return 0;

}

Problem I

1.题目:有n(n<=100)个整数,已经按照从小到大顺序排列好,现在另外给一个整数x,请将该数插入到序列中,并使新的序列仍然有序。

2.思路:可以直接将x带入数组,总体排序,有一点投机取巧的感觉

3.源代码:

#include<iostream>

#include<cstdio>

#include<algorithm>            //sort排序头文件

using namespace std;

int main()

{

    int n,m,i,a[102];

while(cin>>n>>m)

{

    if(n==0&&m==0)

    return 0;

    else

    for(i=0;i<n;i++)

    cin>>a[i];

    a[n]=m;

    sort(a,a+n+1);

    for(i=0;i<n;i++)

    cout<<a[i]<<" ";

    cout<<a[n];

cout<<endl;

}

}

}

Problem K

1.题目:最少需要准备多少张人民币,工资都是正整数,单位元,人民币一共有100元、50元、10元、5元、2元和1元六种。

2.思路:因为是最少,所以要从100开始取摸,然后将所有张数相加

3.源代码:

#include<iostream>

using namespace std;

int main()

{

    int n,m,i,a,b,c,d,e,f,s[100],p=0;

    while(cin>>m)

    {   if(m==0)

        return 0;

        for(i=1;i<=m;i++)

        {

        cin>>n;

        s[i]=0;

        a=n/100;

        b=(n-100*a)/50;

        c=(n-100*a-50*b)/10;

        d=(n-100*a-50*b-c*10)/5;

        e=(n-100*a-50*b-c*10-d*5)/2;

        f=n-100*a-50*b-c*10-d*5-e*2;

        s[i]=a+b+c+d+e+f;

        a=0,b=0,c=0,d=0,e=0,f=0;

        p+=s[i];

        }

        cout<<p<<endl;

        p=0;

    }

}

Problem N

1.题目:A+B。这个题目的AB不是简单的整数,而是两个时间,AB 都是由3个整数组成,分别表示时分秒,比如,假设A34 45 56,就表示A所表示的时间是34小时 45分钟 56秒。

2.思路:首先后两部分的上下限都是0059,不能超,第二,满60要进1,为了降低难度,我选择先将A,B化成秒,再取摸运算。

3.源代码:

#include<iostream>

using namespace std;

int main()

{

    int n,a,b,c,d,e,f,i,s=0;

    cin>>n;

for(i=1;i<=n;i++)

{

    cin>>a>>b>>c>>d>>e>>f;

    s=(a+d)*3600+(b+e)*60+c+f;        //转换成秒

    a=s/3600;

    b=(s-a*3600)/60;

    c=(s-a*3600-b*60);

cout<<a<<" "<<b<<" "<<c<<endl;

}

}

Problem R

1.题目:有一楼梯共M级,刚开始时你在第一级,若每次只能跨上一级或二级,要走上第M级,共有多少种走法?

2.思路:通过计算,差一阶有一种方法,差两阶有两种方法,差三阶有三种方法,差四阶有五种方法,是一个类似斐波那契数列的规律,先用数组定义前几节的数量,后边用程序计算

3.源代码:

#include<iostream>

using namespace std;

int main()

{

    int n,m[52]={0,0,1,2},i,j,t,a,b;

    for(i=4;i<=51;i++)

    m[i]=m[i-1]+m[i-2];         //前两阶表示第三阶

    cin>>n;

    while(n--)

{

cin>>a;

cout<<m[a]<<endl;

}

    return 0;

}

1.题目:有一只经过训练的蜜蜂只能爬向右侧相邻的蜂房,不能反向爬行。请编程计算蜜蜂从蜂房a爬到蜂房b的可能路线数。

2.思路:与爬楼梯类似,第三项等于前两项之和

3.源代码:

#include<stdio.h>

#include<math.h>

int main()

{

    int N,a,b,i,t;

    double m[52]={1,1,2,3};

    for(i=4;i<=51;i++)

    m[i]=m[i-1]+m[i-2];

    scanf("%d",&N);

    while(N--)

    {

        scanf("%d %d",&a,&b);

        t=abs(a-b);

        printf("%.0lf\n",m[t]);

    }

    return 0;

}

Problem U

1.题目:大家都知道,手机号是一个11位长的数字串,同时,作为学生,还可以申请加入校园网,如果加入成功,你将另外拥有一个短号。假设所有的短号都是是 6+手机号的后5位,比如号码为13512345678的手机,对应的短号就是645678
现在,如果给你一个11位长的手机号码,你能找出对应的短号吗?

2.思路:可将输入定义为一个11为长整数,取摸100000

3.源代码:

#include<iostream>

using namespace std;

int main()

{

    long long n,m;                 //用长整型定义输入的数据

    cin>>n;

    for(int i=1;i<=n;i++)

    {

        cin>>m;

        m=m%100000+600000;

        cout<<m<<endl;

    }

}

课程设计2 Problem A

1.题目:第一天悟空吃掉桃子总数一半多一个,第二天又将剩下的桃子吃掉一半多一个,以后每天吃掉前一天剩下的一半多一个,到第n天准备吃的时候只剩下一个桃子。聪明的你,请帮悟空算一下,他第一天开始吃的时候桃子一共有多少个呢?

2.思路:逆推,从最后一天开始每天加1,乘2得前一天的数量。

3.源代码:

#include <iostream>

using namespace std;

int main(){

    int n,i,s=1;

    while(cin>>n)

{

for(i=1;i<n;i++)

    s=(s+1)*2;

    cout<<s<<endl;

s=1;

}

    return 0;

}

课程设计2 Problem D

1.题目:一个整数,只知道前几位,不知道末二位,被另一个整数除尽了,那么该数的末二位该是什么呢?

2.思路:已知数乘1000099,满足条件输出

3.源代码

#include<stdio.h>

int a[111];

int main(){

int k,m,n,t,i,j;

while(scanf("%d%d",&m,&n)!=EOF)

{

    j=0;

    if(m==0&&n==0)break;

    for(i=0;i<100;i++)

    {

        if((100*m+i)%n==0)

        {

            a[j]=i;

            j++;

        }

    }

    for(i=0;i<=j-1;i++)

    {

        if(i!=j-1)

       {

            if(a[i]<10)printf("0%d ",a[i]);

            else printf("%d ",a[i]);

        }

        if(i==j-1)

        {

            if(a[i]<10) printf("0%d",a[i]);

            else printf("%d",a[i]);

        }

    }

    printf("\n");

}

return 0;

}

课程设计2 Problem G

1.题目:有二个整数,它们加起来等于某个整数,乘起来又等于另一个整数,它们到底是真还是假,这种整数到底存不存在

2.思路:遍历区间内整数是否满足条件

3.源代码:

#include<stdio.h>

int main()

{

int n,m,i,j,k,l,s;

while(scanf("%d %d",&n,&m)!=EOF)

{

if(n==0&&m==0) return 0;

s=0;

for(i=0,j=0;i<=10000,j>=-10000;i++,j--)

if((n-i)*i==m||(n-j)*j==m){printf("Yes\n");s++;break;}

if(s==0) printf("No\n");

}

}

本周课程设计与学期汇总总结

  这周的课程设计题真的挺难的,不管是思路上还是写程序上都提高很多,也收获了很多东西,像第一次接触acos函数,频繁的多组输入,巩固了之前不在意的知识,很多类似斐波那契的题目,大大增强了数学和编程能力。还有很多严格的格式要求,类似行末不能空格等很多要求,刚开始不注意总是PE,后来才慢慢改善,总的来讲真的学到了很多。三天在机房敲代码的日子真的很难忘,我会一直记得,这种练习也为期末的考试打下了坚实基础,真的很感谢这三天。

  时间真快啊,一学期的程序设计就到了尾声,真的挺舍不得的,从小白到自主写程序,确实付出了挺多,也曾有那么几个夜晚肝到1点多,虽不是大佬,但也欣喜于自己的长足进步。特别感谢费老师的严格,这是促使我们奋进的原动力,也真的是他的无私奉献才换来农大计算机目前稳步前进的状态,可惜下学期就没有程序设计课了,好难过,我会一直记得这段时光。哦,对了,还有ACM的学长学姐,他们也付出很多,每周末从本校跑来讲课,一讲就是一上午,平时也总向她们提问各种问题,从来都是耐心解答,真的很感谢。

  这就是我与程序设计的故事,也许告一段落,也许有缘再见,祝费老师一切安好,学长学姐学习顺利,农大ACM再创佳绩。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值