zoukankan      html  css  js  c++  java
  • 算法竞赛入门经典_2.5_一些小练习_水仙花数_韩信点兵之类的

      看了下时间,是深夜了,我并不想熬夜,我知道熬夜对身体不好,不过经常熬夜的我已经习惯了,反而在这白天很热的夏天容易犯困,觉得晚上效率要高.

    不过还是得把作息调整过来,现在是1点,以后这种博客我会提前一点.

      好,进入正题吧!今天的一节是6题算法练习,我没找到到答案,书中作者也没给答案,应该是认为简单吧,可对我来说还是有难度的.

    目前勉强就做出4题来了.

    第一题是水仙花数(daffodil)问题,这个比较简单,主要用拆分个,十,百就好了,看代码

    #include <stdio.h>
    //水仙花数问题 2017-8-15
    
    int main(int argc, char* argv[])
    {
        int a = 0, b = 0, c = 0;
        for(int i = 100; i < 1000; i++)
        {
            a = i / 100;
            b = i % 100 / 10;
            c = i % 100 % 10;
            if (i == (a*a*a + b*b*b + c*c*c))
                printf("%d
    ", i);
        }
        return 0;
    }

    运行结果:

      第二个练习,是韩信点兵(hanxin)问题,看代码

    #include <stdio.h>
    //韩信点兵 2017-8-15
    int main(int argc, char* argv[])
    {
        int a, b, c;
        int n = 0;
        while (scanf("%d %d %d", &a, &b, &c) == 3 && a > 0 && a < 3 && b > 0&& b < 5 &&c > 0 && c < 7)
        {
            int ans = 0;
            for(int p_i = 10; p_i <= 100; p_i++)
            {
                if (p_i % 3 == a && p_i % 5 == b && p_i % 7 == c){
                    ans = p_i;
                    break;
                }
            }
            n++;
            if (ans != 0)
                printf("Case %d: %d
    ", n, ans);
            else
                printf("Case %d: No answer
    ", n);
        }
    
        return 0;
    }

    运行结果:

      第三题是倒三角形问题(triangle),这种输出题目是找规律,把它看做两部分,一部分是输出空格,另一部分是输出字符,这样就好办了,看代码

    #include <stdio.h>
    //倒三角形问题(trigle) 2017-8-15
    int main(int argc, char* argv[])
    {
        int n = 0;
        while (scanf("%d", &n) == 1 && n > 0 && n <=20)
        {
            for (int j = n; j >= 1; --j)
            {
                for (int i = 1; i <= n-j; ++i)
                {
                    printf(" ");
                }
                for (int i = (2 * j - 1); i >= 1; --i)
                {
                    printf("#");
                }
                printf("
    ");
            }
            }
        
        return 0;
    }

    运行结果走你

    然后是第四题,我暂时还没做出来,先跳过

    看第五题,上代码,走你

    #include <stdio.h>
    //分数化小数 decimal 2017-8-16
    
    #define MAX 1000000
    #define MAX_POS 100
    int main(int argc, char* argv[])
    {
        int a, b, c,kase = 0;
        float decm ;
        while (scanf("%d %d %d", &a, &b, &c)== 3)
        {
            
            decm = (double)a / b;
            if (kase)
                printf("
    ");
            //输出指定精确位的指定形式输出
            char str_form[20] = "";
            sprintf(str_form, "%s.%df
    ", "Case %d: %", c);
            printf(str_form, ++kase, decm);
        }
    }

    在这里我是用了sprinf函数进行一个格式化输出以便于,输出指定的精确位数,鄙人愚见,不知道有没有更好的方法输出.上面还没有加结束条件

    运行结果

    好了今天就这么多了,时间宝贵,早点睡觉,健康还是最重要的.

    注:编程不是看书看会的,也不是听课听会的,而是练会的.

  • 相关阅读:
    画架构图
    做产品的方方面面
    Tomcat一个有意思的漏洞
    LinkedHashMap 作为一个 CacheMap
    Maven提高篇系列之五——处理依赖冲突
    javaweb获取项目路径的方法
    curl工具介绍和常用命令
    Spring事务管理(详解+实例)
    如何更好地使用Java 8的Optional
    input的type=file触发的相关事件
  • 原文地址:https://www.cnblogs.com/ncgds/p/7368562.html
Copyright © 2011-2022 走看看