1. 程式人生 > >一個簡單的萬年曆的實現

一個簡單的萬年曆的實現

由於CPP中沒有自帶的date類,自己造了一個,待優化。

//
// Created by chaomaer on 2018/4/18.
//

#ifndef SIMPLE_OJ_DATE_H
#define SIMPLE_OJ_DATE_H

#include <iostream>
#include <string>
#include <cstdlib>
using namespace std;


class date {
public:
    string str_date;
    int year;
    int month;
    int day;
    int
hour; int minute; int week; date(); date(std::string& s); void setweek(); void printdate(); void getnextday(); private: int getdaynum(); }; // 計算從1970年1月1日到s有多少天 bool isLeapyear(int year); #endif //SIMPLE_OJ_DATE_H
//
// Created by chaomaer on 2018/4/18.
//

#include "date.h"
//date::date(int year, int month, int day, int minute, int week) {} int MONTH[13] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; bool isLeapyear(int year){ return year%400==0||(year%100&&year%4==0); } date::date() {} date::date(std::string &s) { str_date = s; year = atoi(s.substr(0
, 4).c_str()); month = atoi(s.substr(4, 2).c_str()); day = atoi(s.substr(6, 2).c_str()); hour = atoi(s.substr(8, 2).c_str()); minute = atoi(s.substr(10, 2).c_str()); } void date::printdate() { cout<<"year "<<year<<" month "<<month<<" day "<<day<<" week "<<week<<endl; } // 根據隱含資訊去計算 // 1970年1月1日是星期四 void date::setweek() { int d = getdaynum(); week = (4+d)%7; if (week == 0) week = 1; } int date::getdaynum() { // 計算減法 int sum = 0; // 首先計算從日上計算 sum += day-1; // 計算月份 for (int i = 1; i <month ; ++i) { if (i == 2&&isLeapyear(year)){ sum += 29; } else{ sum += MONTH[i]; } } // 計算年份 for (int i = 1970; i <year ; ++i) { if (isLeapyear(i)){ sum += 366; } else{ sum += 365; } } return sum; } void date::getnextday() { day++; week = week+1; if (week == 8) week = 1; if (month == 2 && isLeapyear(year)){ if (day>29){ month++; day = 1; } if (month==13){ month = 1; year ++; } } else if (day>MONTH[month]){ month++; day = 1; if (month==13){ month = 1; year ++; } } }

測試

#include <iostream>
#include "date.h"

using namespace std;
int main(){
    string s = "197001010000 ";
    date date1(s);
    date1.setweek();
    date1.printdate();
    while (true){
        date1.getnextday();
        date1.printdate();
    }
}
#include <iostream>
#include <stdio.h>
#include <string.h>
using namespace std;
int rows, cols;
const int MAXSIZE = 12;
int start;
char road[MAXSIZE][MAXSIZE];
int visit[MAXSIZE][MAXSIZE];
int main(){
//    freopen("../in.txt", "r", stdin);
    while (cin>>rows>>cols>>start&&rows){
        memset(road, -1, sizeof(road));
        memset(visit, 0, sizeof(visit));
        for (int i = 1; i <=rows ; ++i) {
            for (int j = 1; j <=cols ; ++j) {
                char temp;
                cin>>temp;
                road[i][j] = temp;
            }
        }
        //輸入結束,開始模擬
        pair<int ,int > point = make_pair(1, start);
        int step1 = 0;
        bool flag = false;
        while (true) {
            if (visit[point.first][point.second]) {
                cout<<visit[point.first][point.second]
                    <<" step(s) before a loop of "<<step1-visit[point.first][point.second]<<" step(s)"<<endl;
                break;
            }
            int ins = road[point.first][point.second];
            visit[point.first][point.second] = step1;
            step1++;
            switch (ins) {
                case 'S':
                    point.first++;
                    break;
                case 'N':
                    point.first--;
                    break;
                case 'W':
                    point.second--;
                    break;
                case 'E':
                    point.second++;
                    break;
                default:
                    step1--;
                    flag = true;
                    break;
            }
            if (flag) {
                cout<<step1<<" step(s) to exit"<<endl;
                break;
            }
        }
    }
}

相關推薦

php一個簡單方法實現刪除陣列中的某個值

/** * * @param array $arr // 要新增或刪除值的陣列 * @param string $value // 要刪除的值 * @return array */ function deleteByValueToArray($arr, $value){ if(!i

一個簡單實現複製檔案並修改副檔名的小程式

之前在一家公司上班的時候,由於公司電腦裝了加密軟體,自己平時寫的文件什麼的拿不出公司,但加密軟體對部分型別檔案並不加密,所以我就想到了修改檔案型別的辦法解決了這個問題。 下面是程式的實現。 package com.luhy.filetool; import java.i

golang訊號處理及一個簡單例子實現

golang訊號處理及一個例子實現 往往實際專案中,我們希望修改了配置檔案後,但又不重啟程序的情況下而讓它重新載入配置檔案,這時候就需要通過訊號傳遞來進行處理這一優雅過程: 最常用的幾個Term終端傳入訊號 操作說明 一個簡單的栗子實現 幾個T

iOS 一個簡單實現星級評分的方法

我們在開發工程中經常會遇到評分的功能,下面我提供的方法只能用來顯示,暫時不支援點選變化 // // StartView.h // // Created by Will han on 16/3/31

Execl的匯入,基於POI的一個簡單實現

先把Maven依賴匯入進來<dependency>    <groupId>org.apache.poi</groupId>    <artifactId>poi</artifactId>    <versio

ASP.NET Core Web API下事件驅動型架構的實現(一):一個簡單實現

很長一段時間以來,我都在思考如何在ASP.NET Core的框架下,實現一套完整的事件驅動型架構

一個簡單萬年曆實現

由於CPP中沒有自帶的date類,自己造了一個,待優化。 // // Created by chaomaer on 2018/4/18. // #ifndef SIMPLE_OJ_DATE_H

寫了一個簡單輪播效果實現

char line query span size html ef6 ava top <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8">

實現一個簡單的lazyman

實現 blog cti name init timeout bin bsp stack function lazyman(name) { return new lazyman.fn.init(name); } lazyman.fn = lazyman.proto

用socket.io實現websocket的一個簡單例子

soc .html www sock 在線 ket log html 簡單例子 http://biyeah.iteye.com/blog/1295196 socket.io的介紹 http://www.cnblogs.com/mazg/p/5467960.html

用java實現一個簡單的單用戶登陸功能的思路

get 單用戶 這樣的 簡單的 lock ref 數據庫 清除 一個 引用 所謂“單用戶單賬戶登錄”是指:在同一系統中,一個用戶名不能在兩個地方同時登錄。 我們參照 QQ 實現效果:當某賬號在 A 處登錄後,在未退出的情況下,如果再到 B 處登錄,那麽,系統會擠下 A 處

【Java】Swing+IO流實現一個簡單的文件加密程序

als oncommand override fault 源文件 abs directory imp select EncrytService package com.my.service; import java.io.File; import java

【Java】Swing+IO流實現一個簡單的文件加密程序(較完整版)

move 初始 baidu images 文件選擇器 while login 一個 ktr 留著參考 beans package com.my.bean; import java.io.Serializable; public class

Linux中實現一個簡單的進度條【轉】

做的 會有 發現 文件 rsquo 實時 時間 改進 常見 轉自:http://blog.csdn.net/yuehailin/article/details/53999288 說起進度條,其實大家常常見到,比如說你在下載視頻或文件的時候,提示你當前下載進度的就是我們今天

用 C# 實現一個簡單的 Rest Service 供外部調用

message [] operation rem adk www span method title 用 C# 實現一個簡單的 Restful Service 供外部調用,大體總結為4點: The service contract (the methods it o

jQuery實現一個簡單的購物車功能

名稱 展示 -1 set margin for button ans return 最近由於工作需要的原因,開始系統學習jQuery的知識,然後跟著一個視頻教程做了一個購物車的功能,現總結如下。 第一步:準備HTML頁面,代碼如下: <!DOCTYPE html P

python 實現多個線程間消息隊列傳遞,一個簡單的列子

一致性 不同 lee mode any sum ase utf () #-*-coding:utf8-*-"""Producer and consumer models: 1. There are many producers and consumers at the

vue_cli下開發一個簡單的模塊權限系統之建立登錄頁面並且實現在瀏覽器輸入地址出現內容

all tro 標識 打開 logs 開發 內容 引入 系統 新建一個Login.vue(登錄頁面,先把Hello.vue的內容復制過來即可) 然後我們打開router下面的index.js,第一個箭頭:(引入vue路由)第二個箭頭(引入我們新建的Login.vue頁面

vue_cli下開發一個簡單的模塊權限系統之實現登錄

開發 用戶信息 -m 設置 win -o 文件夾 img 本地存儲 因為我們需要和後端數據交互,所以我們需要安裝axios,安裝好以後在main.js引入 v-model是標識空間,v-on:click="doLogin"是登錄事件 doLogin是登錄事件,wi

實現一個簡單的ConnectionPool

方法 == span sql 需要 動手 cti 修改 使用 看了一圈, 沒看到稍微好用的ConnectionPool, 除了一個aiomysql, 但是這個是異步的, 我暫時沒有用到這麽高版本的Python, 所以就動手造一個輪子. 原理比較簡單, 先造一個線程安全的集