习题9-1 时间换算 (15point(s)).c

本题要求编写程序,以hh:mm:ss的格式输出某给定时间再过n秒后的时间值(超过23:59:59就从0点开始计时)。

输入格式:

输入在第一行中以hh:mm:ss的格式给出起始时间,第二行给出整秒数n(<60)。

输出格式:

输出在一行中给出hh:mm:ss格式的结果时间。

输入样例:

11:59:40
30

输出样例:

12:00:10
//   Date:2020/3/21
//   Author:xiezhg5
#include <stdio.h>
#include <stdlib.h> 
struct time             //声明结构体变量time
{
	//成员列表
  int hour,minute,second;
};
int main()
{
  struct time time1;  //定义time类型的变量time1
  //初始化
  time1.hour=0;
  time1.minute=0;
  time1.second=0;
  int n;
scanf("%d:%d:%d %d",&time1.hour,&time1.minute,&time1.second,&n);
//秒与分钟的进制转换
time1.second+=n;
if(time1.second>=60)
{
  time1.minute++;
  time1.second-=60;
}
//分钟与小时的进制转换
if(time1.minute>=60)
{
  time1.minute-=60;
  time1.hour++;
}
//最后判断
if(time1.hour>=24)
{
  time1.hour-=24;
}
  printf("%02d:%02d:%02d",time1.hour,time1.minute,time1.second); //注意输出不够两列就补0 
return 0;
}

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是对应的代码实现: 1. 双向链表的实现: DNode.h: ```c++ #ifndef DNODE_H #define DNODE_H template<typename T> struct DNode{ T data; DNode<T> *prior, *next; DNode(const T &d, DNode<T> *p = nullptr, DNode<T> *n = nullptr):data(d), prior(p), next(n){} }; #endif //DNODE_H ``` 双向链表的实现: ```c++ #include <iostream> #include "DNode.h" template<typename T> class DList{ public: DList() : head(new DNode<T>(T())), size(0){} ~DList(){ DNode<T> *p = head, *q; while(p){ q = p->next; delete p; p = q; } } void insert(const T &d); // 右插入 void leftInsert(const T &d); // 左插入 bool remove(const T &d); // 删除 bool empty() const { return size == 0; } void display() const; private: DNode<T> *head; int size; }; template<typename T> void DList<T>::insert(const T &d){ DNode<T> *p = head; while(p->next) p = p->next; DNode<T> *q = new DNode<T>(d, p, nullptr); p->next = q; ++size; } template<typename T> void DList<T>::leftInsert(const T &d){ DNode<T> *p = head->next; DNode<T> *q = new DNode<T>(d, head, p); head->next = q; if(p) p->prior = q; ++size; } template<typename T> bool DList<T>::remove(const T &d){ DNode<T> *p = head->next; while(p && p->data != d) p = p->next; if(!p) return false; p->prior->next = p->next; if(p->next) p->next->prior = p->prior; delete p; --size; return true; } template<typename T> void DList<T>::display() const{ DNode<T> *p = head->next; while(p){ std::cout << p->data << " "; p = p->next; } std::cout << std::endl; } ``` 2. 直接插入排序: ```c++ #include <iostream> #include <vector> template<typename T> void insertSort(std::vector<T> &arr){ int n = arr.size(); for(int i = 1; i < n; ++i){ T tmp = arr[i]; int j = i - 1; while(j >= 0 && arr[j] > tmp){ arr[j+1] = arr[j]; --j; } arr[j+1] = tmp; } } int main(){ std::vector<int> arr{3, 5, 1, 4, 2}; insertSort(arr); for(auto x : arr) std::cout << x << " "; std::cout << std::endl; return 0; } ``` 3. 选择排序: ```c++ #include <iostream> #include <vector> template<typename T> void selectSort(std::vector<T> &arr){ int n = arr.size(); for(int i = 0; i < n-1; ++i){ int k = i; for(int j = i+1; j < n; ++j){ if(arr[j] < arr[k]) k = j; } if(k != i) std::swap(arr[i], arr[k]); } } int main(){ std::vector<int> arr{3, 5, 1, 4, 2}; selectSort(arr); for(auto x : arr) std::cout << x << " "; std::cout << std::endl; return 0; } ``` 4. 起泡排序: ```c++ #include <iostream> #include <vector> template<typename T> void bubbleSort(std::vector<T> &arr){ int n = arr.size(); for(int i = 0; i < n-1; ++i){ bool flag = false; for(int j = 0; j < n-1-i; ++j){ if(arr[j] > arr[j+1]){ std::swap(arr[j], arr[j+1]); flag = true; } } if(!flag) break; } } int main(){ std::vector<int> arr{3, 5, 1, 4, 2}; bubbleSort(arr); for(auto x : arr) std::cout << x << " "; std::cout << std::endl; return 0; } ``` 5. 折半查找: ```c++ #include <iostream> #include <vector> template<typename T> int binarySearch(std::vector<T> &arr, const T &x){ int l = 0, r = arr.size()-1; while(l <= r){ int mid = (l+r)/2; if(arr[mid] == x) return mid; else if(arr[mid] < x) l = mid + 1; else r = mid - 1; } return -1; } int main(){ std::vector<int> arr{1, 2, 3, 4, 5}; int pos = binarySearch(arr, 4); std::cout << pos << std::endl; return 0; } ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值