数据结构、算法与应用C++【第一章 C++回顾】答案解析5-7【日更】

第5题

#include <iostream>
using namespace std;
template <class T>

//当直接填入小数value常数这时候就是double
//a和value一时间内必须为同一种(一定是同一种类型的才可以)
//即使可以把精度提高也不可以
//比如a是double
//那么T就是double
//value如果一开始定义了一个float类型的value的变量
//那么即使T是double,精度比float高
//也会报错
void iota(T* a,T value,int size)
{
    for (int i = 0; i < size; i++)
    {
        a[i] = value+i;
    }
}

//接下来就重载a和value不同类型的函数了
void iota(float* a,double value,int size)
{
    for (int i = 0; i < size; i++)
    {
        a[i] = value+i;
    }
}

int main()
{
    double arr[7] = {0};
    double value = 2.4;
    int size = sizeof(arr)/sizeof(arr[0]);
    iota(arr,value,7);

    for (int i = 0; i < 7; i++)
    {
        cout<<arr[i]<<endl;
    }
    return 0;
}

第6题

#include <iostream>
using namespace std;
template <class T>

bool is_sorted(T* arr,int size)
{
    if(size<=2)
    {
        return false;            
    }   

    for (int i = 0; i < size-1; i++)
    {
        //先比较前两个
        if(arr[i]<arr[1+i])
        {
            //减一防止越界
            //既然大小都变换了,那么就可以开始判断了
            //前两个已经判断完关系了
            //可以比较下表为1和2的元素
            for(int j = 1;j<size-1;j++)
            {
                if(arr[j]>arr[j+1])
                {
                    return false;
                }
            }
            //都比较完了,那就说明满足小于等于的关系
            //下面同理
            return true;
        }
        else if(arr[i]>arr[1+i])
        {
            //减一防止越界
            //既然大小都变换了,那么就可以开始判断了
            //前两个已经判断完关系了
            //可以比较下表为1和2的元素
            for(int j = 1;j<size-1;j++)
            {
                if(arr[j]<arr[j+1])
                {
                    return false;
                }
            }
            return true;
        }
        else if(arr[i]==arr[i+1])
        {
            //如果一直等于就循环,
            //一直到结果出来,或是判断出来全部都等于
            //如果是全部都等于,那么标记就不用改
            //还是0
            continue;
        }
    }

    return true;
    
}

int main()
{
    int arr[] = {1,5,6,7,8,7,9,10,22};
    int size = sizeof(arr)/sizeof(arr[0]);
    //非0即真,真即1,假即0
    cout<<is_sorted(arr,size)<<endl;
    return 0;
}

第7题

#include <iostream>
using namespace std;
template <class T>

int mismatch(T* arr1,T* arr2,int size)
{
    for (int i = 0; i < size; i++)
    {
        if(arr1[i]!=arr2[i])
        {
            return i;
        }
    }
    //没有下标表示-1
    //别人看到-1肯定会疑惑
    //就会来看这个函数是怎么写的
    //这时候我备注一下返回值是-1的意思
    //返回值-1表示这两个数组大小相同
    return -1;
}

int main()
{
    int arr1[] = {1,2,5,6,4,7};
    int arr2[] = {1,2,5,6,3,7};
    int size1 = sizeof(arr1)/sizeof(arr1[0]);
    int size2 = sizeof(arr1)/sizeof(arr1[0]);
    if(size1>=size2)
    {
        cout<<mismatch(arr1,arr2,size2)<<endl;
    }
    else if(size1<size2)
    {
        cout<<mismatch(arr1,arr2,size1)<<endl;
    }
    return 0;
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值