zoukankan      html  css  js  c++  java
  • 算法笔记-第三章题目解

    背景

    最近在恶补数据结构和算法相关的知识,查询到一本比较好的书籍算法笔记,然后就开始学习了,学完第二章C/C++语言基础后,做了第三章的题目,虽然书上已经有题解了,但是还是想发表这篇文章,原因是通过记录下来我的学习过程,以提醒和鼓励自己。

    第三章题解

    #include <stdio.h>
    #include <cstring>
    
    int main() {
    
    }
    
    /**
     * 说反话
     * @return
     */
    int reverseWords() {
        char strOri[80] = {};
        char words[40][80] = {};
        gets(strOri);
        int rowNum = 0;
        int colNum = 0;
        for (int i = 0; i < strlen(strOri); ++i) {
            //不是空格的就放入二维数组,直到遇到空格,改成下一行
            if (strOri[i] != ' ') {
                words[rowNum][colNum] = strOri[i];
                colNum++;
            } else {
                rowNum++;
                colNum = 0;
            }
        }
    
        //倒叙输出二维数组的单词
        for (int i = rowNum; i >= 0; i--) {
            printf("%s ", words[i]);
        }
    }
    
    /**
     * 判断回环字符串
     * @return
     */
    int loopback() {
        char str[256] = {};
        scanf("%s", str);
    
        int length = strlen(str);
    
        for (int i = 0; i < length / 2; ++i) {
            if (str[i] != str[length - i - 1]) {
                printf("%s", "NO");
                return 0;
            }
        }
        printf("%s", "YES");
        return 0;
    }
    
    /**
     * 进制转换
     * @return
     */
    int baseChange() {
        //a,b<= 2^30 -1,1<n<=10
        //a+b<= 2^31 -2
        //int 范围:2^31-1,所以a+b可以用int来接收
        int a, b, d;
        scanf("%d%d%d", &a, &b, &d);
        int sum = a + b;
        int resultNumber[32] = {0};
        //除基取余
        int i = 0;
        for (;; ++i) {
            resultNumber[i] = sum % d;
            if (sum / d == 0) {
                break;
            }
            sum = sum / d;
        }
    
        for (int j = i; j >= 0; j--) {
            printf("%d", resultNumber[j]);
        }
        return 0;
    }
    
    /**
     * 日期计算器
     * @return
     */
    int dateCal() {
        int date1, date2;
        scanf("%d%d", &date1, &date2);
        if (date1 > date2) {
            int tmp = date1;
            date1 = date2;
            date2 = tmp;
        }
    
        int yy1 = date1 / 10000, mm1 = date1 % 10000 / 100, dd1 = date1 % 100;
        int yy2 = date2 / 10000, mm2 = date2 % 10000 / 100, dd2 = date2 % 100;
    
    
        //第一个日期不断加N天,直到等于第二个日期
        int n = 0;
        while (true) {
            //构建新日期串
            dd1 = dd1 + 1;
    
            int ddlast = 0;
            bool is31 = mm1 % 2 == 1 || mm1 == 8;
            if (is31) {
                ddlast = 31;
            } else if (mm1 == 2) {
                //判断是否闰年
                bool isRun = (yy1 % 4 == 0 && yy1 % 100 != 0) || (yy1 % 400 == 0) ? true : false;
                if (isRun) {
                    ddlast = 29;
                } else {
                    ddlast = 28;
                }
            } else {
                ddlast = 30;
            }
    
            if (dd1 > ddlast) {
                dd1 = 1;
                mm1 = mm1 + 1;
            }
    
            if (mm1 > 12) {
                mm1 = 1;
                yy1 = yy1 + 1;
            }
    
            if (!(dd1 == dd2 && mm1 == mm2 && yy1 == yy2)) {
                n += 1;
            } else {
                break;
            }
        }
        printf("%d", n + 2);
        return 0;
    }
    
    
  • 相关阅读:
    hdu1240 bfs 水题
    hdu 2102 BFS
    gym 101081E Polish Fortress 几何
    Gym 101081K Pope's work dp
    hdu 6188 贪心
    hdu 6186 水
    Codeforces Round #430 (Div. 2) A B 水 C dfs,思维 D trie,二进制
    hdu6152 拉姆齐定理
    hdu6165 缩点,dfs
    hdu6153 扩展KMP
  • 原文地址:https://www.cnblogs.com/ging/p/13488956.html
Copyright © 2011-2022 走看看