课程设计总结

 

 

 

第五题

题意:

给出一组数,求其倒数的和。

分析:

由题意得,取倒数时应用float(1.0),int会导致结果为0;

奇数项和偶数项的符号不同,使用if 语句进行分类。判断奇偶数,奇数项相加,偶数项相减。

多个数使用嵌套循环,从1到m循环。

 

代码如下:

#include <iostream>

#include <iomanip>

using namespace std;

int main()

{

    int m,i,j,n[101];

    float t,s;

    cin>>m;

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

    cin>>n[i];

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

{

    s=0;

    for(j=1;j<=n[i];j++)

{   

    t=1.0/j;

    if(j%2!=0)

    {s=s+t;}

    if(j%2==0)

    {s=s-t;}

}

    cout<<fixed<<setprecision(2)<<s<<endl;

}

    return 0;

}

 

第六题

题意:

给出n个起始值为2的有序偶数,每m个取其平均值,不足m个的以实际量求平均值。

分析:

分成两段,先求每m个平均值,再对剩余数取平均值。

使用循环嵌套取平均值时,求和的初始值是0,定义在循环前,每次循环前清除前次累加和。

每个数的值依次增加2,在循环内累加,求和。

不足的部分循环累加,取平均值。

 

代码如下:

#include<iostream>

#include<cmath>

using namespace std;

int main()

{

    int j,a,i,n,m,sum;

    while(cin>>n>>m)

    {

        a=0;

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

        {

            sum=0;

            if(i>0) 

            cout<<" ";

            for(j=0;j<m;j++)

            {

                a=a+2;

                sum=sum+a;

            }

  

第八题

题意:

小母牛四天长大,成熟的母牛每天生一头小牛,求第n天的牛的数目。

分析:

递归算法。第n天牛的数目=昨天牛的数目+今天新生牛的数目。

因为牛第四天开始生小牛,a[i]=a[i-1]+a[i-3]

使用循环,从第四天开始,进行递推。

 

代码如下:

#include <iostream>  

using namespace std;  

int main()  

{  

    int n,i;  

    int f1, f2, f3, fn;  

    while(cin>>n&&n!=0)  

    {  

        f1=1;  

        f2=2;  

        f3=3;  

        if(n==1)  

            cout<<f1<<endl;  

        else if(n==2)  

            cout<<f2<<endl;  

        else if(n==3)  

            cout<<f3<<endl;  

        else  

        {  

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

            {  

                fn=f3+f1;  

                f1=f2;  

                f2=f3; 

                f3=fn; 

            }  

            cout<<fn<<endl;  

        }  

    }  

    return 0;  

}  第九题

题意:

对一组数的绝对值从大到小进行排序,输出原数。

分析:

使用冒泡法进行比较,交换,

对一个数运用函数取绝对值进行排序,输出原数。

头文件#include<cmath>调用函数abs(x)

代码如下:

#include<iostream>

#include<cstdio>

#include<cmath>

#include<algorithm>

using namespace std;

int main()

{ int n,a[100],i,l,j;

   while(cin>>n)

   { if(n==0)

  continue;

     else

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

    { cin>>a[i]; }

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

     { l=i;      

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

       {if(abs(a[j])>abs(a[l]))

         l=j;}

         if(l!=i)

         swap(a[i],a[l]); }

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

         {if(i==n-1)

          cout<<a[n-1];

          else

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

          cout<<endl;

         

         }}

      

   

第十题

题意:

一组从大到小的有序数列中插入一个新数,依旧有序。

分析:

将新的数看做数组的最后一个元素,构成一个新的数组,

对新的数组进行排序,逆序排序,新增的数与原数组比较,交换。

原数组最后一个数是a[n-1],新的数是a[n];

a[j]与a[j+1]比较,可以全部比较。

 

代码如下:

#include<stdio.h>

int main() {

    int i,j,k,m,n;

    while(scanf("%d %d",&n,&m),n!=0||m!=0) {

        int a[120];

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

            scanf("%d",&a[i]);

        a[n]=m;

   for(j=n-1; j>=0; j--) {

            if(a[j]>a[j+1]) {

                k=a[j];

                a[j]=a[j+1];

                a[j+1]=k;

            } else

                break;

        }

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

            if(i==0)

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

            else

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

        }

        printf("\n");

    }

    return 0;

}

 

 

  

第十二题

题意:

判断读入的字符串是否是回文串。

分析:

输入一个字符串,调用函数#include<cstring>

使用l=strlen(x)表示字符串的长度。

定义两个变量,i,j;i=0,j=l-1,

i++,j--,两个变量同时变化,缩小时间,

最后判断i和j的关系。

 

 

代码如下

#include<iostream>

#include<cstring>

using namespace std;

int main()

{

    int n,l,i,j;

    char s[100];

    cin>>n;

    while(n--)

    {

        cin>>s;

        l=strlen(s);

        i=0,j=l-1;

        while(i<j)

        {

            if(s[i]!=s[j])

            {

                break;

            }

            i++;

            j--;

        }

        if(i>=j)

        {

            cout<<"yes"<<endl;

        }

        else

        {

            cout<<"no"<<endl;

       }

    }

    return 0;

}

 

 

第十四题

题意:

给出两组数据,6个数,按照时间的规则相加,输出结果。

分析:

满60进1,小时没有限制,先对分钟进行相加,再对秒进行相加,满60,分钟加一,先对秒进行相加,分类情况较多,比较麻烦。

 

 

代码如下:

#include<iostream>

using namespace std;

int main()

{

    int N,AH,AM,AS,BH,BM,BS,g,c,k;

    cin>>N;

    while(N--)

    {

        cin>>AH>>AM>>AS>>BH>>BM>>BS;

        c=AH+BH;

        if(AM+BM>=60)

        {

            c=c+1;

            g=AM+BM-60;

        }

        else

        {

            g=AM+BM;

        }

        if(AS+BS>=60)

        {

            g=g+1;

            k=AS+BS-60;

        }

        else

        {

            k=AS+BS;

        }

        cout<<c<<" "<<g<<" "<<k<<endl;

    }

    return 0;

}

 

 

 

 第十三题:

题意:

将一个十进制的数转化为一个R进制的数。

分析:

根据进制之间转换的方法,循环相除,取余。

首先,处理数据,负数取负,转换为正数。

取余时,累加计数,逆序输出。

 

 

代码如下:

#include<stdio.h>

int main()

{

    int n,r,i;

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

    {

        if(n<0)

printf("-");n=-n;

        }

        if(n==0){printf("0\n");continue;}

        int c=0,a[100];

        while(n)

        {

            a[c]=(n%r);

            c++;

            n/=r;

        }

        for(i=c-1;i>=0;i--)

        {

            if(a[i]>=10)

            {

                printf("%c",'A'+a[i]-10);

            }

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

        }

        printf("\n");

    }

}

 

 

第十五题

题意:

集合A-B所剩的元素。

分析:

输入A和B的元素,先找两个集合中相同的元素,将A中的元素记为—1,并计数K。

循环结束后,先判断K是否我0;是否为空集。

在输出时输出大于0的数。相同元素不被输出。

 

 

代码如下:

#include<iostream>

#include<algorithm>

using namespace std;

int main()

{

    int a[101],b[101],i,j,m,n,k;

    while (cin>>n>>m)

    {

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

        break;

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

        cin>>a[i];

        for(j=0;j<m;j++)

        cin>>b[j];

        k=0;

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

        {

           for(j=0;j<m;j++)

           {

               if(a[i]==b[j]) {

                k+=1;

               a[i]=-1;

               }

               }

          }

        if(k==n)

        cout<<"NULL";

        else

        {

            sort(a,a+n);

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

            {

                if(a[i]>=0)

            {

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

            }

            }

            }

            cout<<endl;

    }return 0;

}

第十六题:

题意:

给出两个数A B,求A的B次方的最后三位数。

分析:

A的B次方可以看做B个A相乘。

要求输出最后三位数,取A/1000的余数。

 

 

代码如下:

#include<iostream>

#include<cstdio>

#include<cmath>

using namespace std;

int main()

{

   int A,B,a;

   while(cin>>A>>B)

   {

       if(A==0&&B==0)

       {

           break;

       }

       a=1;

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

       {

           a=a*A%1000;

       }

       cout<<a;

       cout<<endl;

   }

   return 0;

}

 

 

第十八题:

题意:

输入n个数,从1到m可以增加1,可以增加2,判断有几种增加方案。

分析:

采用递归算法,当m>=4的时候,m增加,可以选择的方案增加,关系为a[i]=a[i-1]+a[i-2]。

 

 

代码如下:

#include<iostream>

#include<cmath>

using namespace std;

int main()

{

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

    cin>>n;

  a[1]=0;

    a[2]=1;

    a[3]=2;

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

    {

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

    }

    while(n--)

    {

        cin>>m;

        cout<<a[m];

        cout<<endl;

    }

    return 0;

}

 

 

第二十三题

题意:在一个区间内,去掉不吉利的数字,输出剩余的数字。

分析:

去掉含4或62的数,求出区间内数字的每一位是否为4,循环,依次除以10,连在一起的62,循环,n/100是否为62。依次除以10。两者满足其一即可。

采用循环的方法进行查找。

 

代码如下:

#include <iostream>

#include <cstring>

using namespace std;

int a[1000001]= {0};

int st(int n)

{

    while(n)

    {

        if(n%10==4||n%100==62)

            return 0;

        n=n/10;

    }

    return 1;

}

 

 

int main()

{

    int n,m,i;

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

    {

        a[i]=a[i-1]+st(i);

    }

    while(cin>>n>>m)

    {

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

            break;

        cout<<a[m]-a[n-1]<<endl;

    }

    return 0;

}

    

 

第一题

题意:

一个数减半后再减一,n次后,余1。

分析:

采用逆向思维,从最后的结果推出开始的结果。

余数加1再乘2。sum=(sum+1)*2。循环,经过n次,得出初始值。

 

代码如下:

#include<iostream>

#include<cstdio>

using namespace std;

int main ()

{

    int n,i,sum;

    while(cin>>n&&n!=0)

    {

      if(n==0)

      break;

      sum=1;

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

    sum=(sum+1)*2;

    printf("%d\n",sum);

    }

    return 0;

}

    第五题:

题意:

将一个偶数拆成两个素数的和,输出其可能的结果个数。

分析:

通过循环,判断两个素数之和是否为要求的偶数。

并进行计数。

 

 

 

代码如下:

#include<iostream>

#include<cstdio>

#include<cmath>

using namespace std;

int main()

{

    int n,s,a[10000];

    for(int i=3;i<=10000;i++)

    {

        a[i]=i;

    }

    for(int i=2;i<=10000;i++)

      for(int j=2*i;j<=10000;j+=i)

      {

          a[j]=0;

      }

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

    {

        s=0;

        for(int i=3;i<n/2;i++)

        {

            if(a[i]+a[n-i]==n)

            s++;

        }

        cout<<s<<endl;

    }

    return 0;

}

     第六题

题意:

一个十进制的数分别用十二进制和十六进制表示,各个数字相加之和是否相等。

分析:

将十进制的数分别用十二进制和十六进制进行求余计算并相加,判断是否相等。

 

 

代码如下:

#include<iostream>

#include<cstdio>

#include<cmath>

using namespace std;

int main()

{

    int n,n1,n2,n3,n4,a,b,c,s1,s2,s3;

    while(cin>>n)

    {

        n1=n2=n3=n4=n;

        s1=0;s2=0;s3=0;

        if(n==0)

        break;

        while(n1)

       {

            a=n1%10;

            n1=n1/10;

            s1+=a;

        }

        while(n2)

        {

            b=n2%12;

            n2=n2/12;

            s2+=b;

        }

        while(n3)

        {

            c=n3%16;

            n3=n3/16;

            s3+=c;

        }

        if(s1==s2&&s1==s3)

        printf("%d is a Sky Number.\n",n4);

        else

        printf("%d is not a Sky Number.\n",n4);

    }

    return 0;

}

 

总结:

课程设计需要认真审题,明白输出内容,注意细节。

发散思维,采用逆序,计数,递归算法等使程序简单,

一些头文件,和函数的使用,使程序简洁。

循环时注意限制条件进行嵌套。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值