C++课程设计

本文介绍了四个C++编程问题的解决方案,涉及数列求平均值、字符串回文判断、递归算法计算牛的数量以及递推算法求解特定数值。通过实例展示了如何运用数组、循环、递归和数学方法解决实际编程问题,如动态规划、回文判断、数组初始化和数值计算。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

                Problem  1
1,题意:数列An=2n(n<=100),每m个数输出一个平均值。
2,解题思路:首先将n个单位长度的数列存在数组里,结合循环进行求解。
如果n<=m时,利用公式直接求出结果。如果n>m时,每m个数进行计算后将和储存在sum中,用sum比上m求出前几项。当循环依次增加到n时,跳出循环,若n比m的余数为0,则此时储存的sum值除以m为最后一项,若n比m的余数不为0,则此时储存的sum值除以该余数为最后一项。
3,解题细节处理:注意每次储存值sum,使用完后应该重新赋值   0,数组也应重新初始化。本题中用到的特殊函数的头文件的添加,按照题目要求注意输出格式。
4,原码:
#include<iostream>
#include<cmath>
#include<cstring>   //memset()函数的头文件//
using namespace std;
int a[100];     //主函数外定义数组,不用初始化//
int main()
{
    int n, i, m, j, sum = 0, k = 1,x,  t;
    while (cin >> n >> m)     //输入多组数值//
    {
        x=n%m;    //获得n除以m的余数//
        if(n>m)
      {  t = m;
        for (i = 1; i <= n; i++)
        {  a[i] = 2 * i;  }       //将n个长度的An数列储存在数组中//
        for (j = k; j < m + 1; j++)
        {
            sum = a[j] + sum;      //利用用循环进行求解//
            if (j == n)
                break;
            if (j == m)
            {
                sum = sum / t;     
                cout << sum << ' ';
                k = k + t, m = m + t, sum = 0;
            }
        }
        if(x!=0)
        sum = sum /x;    //余数不为0,则除以这个余数//
        if(x==0)
        sum=sum/t;       //余数为0,则除以起初m赋值的t//
        cout << sum << endl;
        sum = 0;        //对sum的重新赋值//
        k = 1;     
        memset(a, 0, sizeof(a));}    //对数组a初始化//
        else if(n==m||n<m)
        {cout<<(n*n+n)/n<<endl;}
    }
}
5,总结:
           由An是有规律的数列,首先想到用数组进行储存数值,又由题目进行多组数据的判断,应使用循环嵌套,然后结合条件判断进行计算。
                      Problem 2
1,题意: 判断输入的字符串是否为回文。
2,解题思路形成:将字符串储存字符数组里,用循环从数组的两侧进行判断是否一样,。
3,解题细节处理:注意进行循环语句时,数组是从0开始的。在判断字符数组中首尾字符是否一样时,利用goto语句使过程更简化。
4,原码:
#include<iostream>  
#include<cstring>     //用到此头文件//
using namespace std;
char m[3000];      //定义一个足够大的数组//
int main()
{
    int n,i,j,sum=0;
    cin>>n;
    while(n--)     //n不等于0即为真//
    {
        cin>>m;   //依次输入n个字符串//
        for(i=0;i<3000;i++)
        {
            if(m[i]!=0)
            sum=sum+1;   //求出每个字符串的长度//
            else
            break;
        }
        for(i=0,j=sum-1;i<j;i++,j--)
       {
           if(m[i]!=m[j])
      {cout<<"no"<<endl;    //判断首尾字符是否相同,若不同,跳到loop//
            goto loop;}
       }
cout<<"yes"<<endl;  //若文件运行到此处,说明上述判断都成立,则输出结果//
       loop:  ;
    sum=0;     //对sum赋值0,确保下次循环不受影响//
 memset(m,0,sizeof(0));     //对数组初始化//
    }
    return 0;
}
5,总结:
     若对字符串结构进行相关操作时,一般情况下应该将字符串放到字符数组中,进行相关操作。
Problem 3
1,题意:母牛每年年初生一头小牛,小牛从第四年开始开始生小牛,求牛的总数;
2,解题思路形成:由题目容易看出应该使用递归算法,结合数组进行求解;
3,解题细节处理:由于题目的Sample Input 为2,4,5时,Sample Output分别2,4,6可猜想第一年年初应该没有生小牛,第二年才开始。数组的定义应为第一年的母牛为刚成熟,第二年为可生产。
4,原码:
#include<iostream>
int a[3] = { 0,1 ,0 };   //设置一个三个单位长度的数组,分别代表第三岁
using namespace std;        的,二岁的,一岁的母牛// 
int main()
{
    int n, t, i, sum = 0;
    while (cin >> n&&n!=0)       //输入年数,且0时停止运行//
    {
        for (i = 1; i <= n; i++)
        {
            t = a[0];         //成熟牛生产的小牛等于成熟牛的数给t//
            a[0] = a[0] + a[1];  //二岁牛也成熟,并到a[0]中//
            a[1] = a[2];        //一岁牛成长为二岁牛,赋值给a[1]//
            a[2] = t;           //生产的小牛数给a[2]//
        }
        sum = (a[0] + a[1] + a[2] ) ;  //计算牛的总数//
        cout << sum << endl;
        sum = 0;
        a[0] = 0, a[1] = 1, a[2] = 0;    //初始化数值,a[1]=1,为下次计算使用//
    }
}
5,总结:解决此类问题时,应该首先想到递推和数组结合,注意数值的变化。再对整体求和得出结果。
                    Problem 4
题意:如下图所示的蜂房,一个不能反向爬行的蜜蜂从a到b,求其路线数。

2,解题思路形成:蜜蜂从a到b,从b开始算起,若想到b位置,只能从b-1或b-2位置爬过来,所以也应该用递归算法。定义数组进行求解。
解题细节处理:此题可以将系统所包含的蜂房数即从1到49之间的每次走法都算出来,用1到b减去1到a,也可对每次a到b进行计算。但任需注意数值的变化和数组初始化。
原码:
#include<iostream>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值