1. 简答题 设计一个时钟类,要求成员数据 时,分,秒,有成员函数 输入时间和显示时间。要求有构造函数,析构函数和拷贝构造函数。

  1. 简答题
    设计一个时钟类,要求成员数据 时,分,秒,有成员函数 输入时间和显示时间。要求有构造函数,析构函数和拷贝构造函数。
#include<iostream>
#include<iomanip>
using namespace std;
 
class Time
{
public:
    void setHour(int newH)
    {
        if(newH<0 || newH>12)
            hour = 12;
    }
    void setMinue(int newM)
    {
        if(newM<0 || newM>60)
            minute = 0;
    }
    void setSecond(int newS)
    {
        if(newS<0 || newS>60)
            second = 0;
    }
    void setTime(int newH, int newM, int newS);
    void showTime(void)
    {
        cout<<setw(2)<<setfill('0')<<hour<<":"<<setw(2)<<setfill('0')<<minute<<":"<<setw(2)<<setfill('0')<<second<<endl;        ///控制输出为2位, 不足的用字符‘0’补齐
    }
private:
    int hour;
    int minute;
    int second;
};
void Time::setTime(int newH, int newM, int newS)
{
    hour = newH;
    minute = newM;
    second = newS;
    setHour(newH);
    setMinue(newM);
    setSecond(newS);
}
int main(void)
{
    Time myTime;
    int h;
    int m;
    int s;
    cin>>h>>m>>s;
    myTime.setTime(h, m, s);
    myTime.showTime();
    return 0;
}

  • 你可以看下这个问题的回答https://ask.csdn.net/questions/7693458
  • 你也可以参考下这篇文章:输入两个整数,求;两者的和,差,积,商,余数。
  • 除此之外, 这篇博客: 一个有序数组,找到两个数使得它们相加之和等于目标数中的 一个有序数组,找到两个数使得它们相加之和等于目标数 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 原题: 一个有序数组,找到两个数使得它们相加之和等于目标数。函数应该返回这两个下标值 index1 和 index2,其中 index1 必须小于 index2。

    说明:

    返回的下标值(index1 和 index2)从1开始的。
    你可以假设每个输入只对应唯一的答案,而且你不可以重复使用相同的元素。

    此题作者已知有三种解决方法:

    方法一:暴力解法
    此方法适用于所有的数组(无序和有序,包括重复元素),时间复杂度为O(n² ),空间复杂度为O(1):

    vector<int> twoSum(vector<int>& numbers, int target)
    {
    	vector<int> m_vecOutput;
    	int i = 0;
    	int j = 0;
    	for (; i < numbers.size(); i++)
    	{
    		for (j = i + 1; j < numbers.size(); j++)
    		{
    			if (numbers[i] + numbers[j] == target)
    			{
    				m_vecOutput.push_back(i);
    				m_vecOutput.push_back(j);
    				return m_vecOutput;
    			}
    		}
    	}
    	return m_vecOutput;
    }
    

    方法二:哈希表法
    此方法适用于不含重复元素的数组,时间复杂度为O(n), 空间复杂度O(n):

    vector<int> twoSum(vector<int>& numbers, int target)
    {
    	unordered_map<int, int> m_HashNum;
    	vector<int> m_vecOutput;
    	for (int i = 0; i < numbers.size(); i++)
    	{
    		m_HashNum[numbers[i]] = i;
    	}
    
    	int index2 = 0;
    	for (int i = 0; i < numbers.size(); i++)
    	{
    		index2 = m_HashNum[target-numbers[i]];
    		if (index2 > i)
    		{
    			m_vecOutput.push_back(i+1);
    			m_vecOutput.push_back(index2+1);
    		}
    	}
    	return m_vecOutput;
    }
    

    方法三:双指针方法
    此方法适用于有序数组,时间复杂度为O(n), 空间复杂度O(1):

    	vector<int> m_vecOutput;
    	int i = 0;
    	int j = 0;
    	for (; i < numbers.size(); i++)
    	{
    		for (j = i + 1; j < numbers.size(); j++)
    		{
    			if (numbers[i] + numbers[j] == target)
    			{
    				m_vecOutput.push_back(i);
    				m_vecOutput.push_back(j);
    				return m_vecOutput;
    			}
    		}
    	}
    	return m_vecOutput;
    

    结束语:小编菜鸟一枚,初次写博客,如有问题还请多多指教

    原题链接:https://leetcode-cn.com/problems/two-sum-ii-input-array-is-sorted

  • 您还可以看一下 贺利坚老师的数据结构基础系列(2):线性表课程中的 创建线性表的实现(暨参数类型的讨论)小节, 巩固相关知识点