实例:
1.阶乘之和
输入n,计算S= 1!+2!+3!+…+n!的末六位。
分析:两个循环,里面循环用于计算不同数的阶乘,外面一个循环用于将所有阶乘相加,核心算法

"for(int i=1; i<=n ;i++) S+=i!" //伪代码

可以同时加一个计时器测试程序的运行速度

#include <stdio.h>
#include <stdlib.h>
#include <time.h>int main()
{const int MOD = 1000000;int n, S = 0;scanf("%d", &n);for(int i = 1; i <= n; i++){int factorial = 1;for(int j = 1; j <= i; j++)factorial = (factorial * j % MOD);S = (S + factorial) % MOD;}printf("%d\n",S);printf("Time used = %.2f\n", (double)clock()/ CLOCKS_PER_SEC); //clock()返回的是程序开始后所用的系统时间,但是单位不是秒,而CLOCK_PER_SEC是每秒的系统时间单位常量,所以除以它就是经过了多少秒return 0;
}

还有很多问题不明白
25!末尾6个0所以就之后的所有项都是940313,这是什么意思,没太明白
明白了,可以吧这六个0象作10的6次方,所以25!之后的所有项与25!相乘都会有10的六次方与他们相乘,所以就是所有的项都将起码6个0.所以后六位的数据就不会再变了

2.4 算法竞赛中的输入输出框架
实例1:

连续输入1000以内的整数,求出最小最大与平均值

#include <stdio.h>
#define INF 100000int main()
{int x, n = 0, min = INF, max = -INF, s = 0;while(scanf("%d", &x) == 1)  //scanf的返回值是输入的变量数{s += x;if(x < min) min = x;     //如果不对min和max进行初始化,则会出现一个随机的初值if(x > max) max = x;   //有可能这个初值大于所有输入的值,所以不能让min或max更新,所以需要设定一个初值n++;}printf("%d %d %.3f\n", min, max, (double)s/n);return 0;
}

使用文件最简单的方法是使用输入输出重定向,只需在main函数的入口处加入下两条语句

freopen("input.txt","r",stdin);
freopen("output.txt", "w", stdout);

这两条语句将程序所有的输入和输出都改为文件。

可以利用

#define LOCAL
#ifdef LOCAL
...
#endif

用这种来选择性编译中间的语句
实例2
输入包含多组数据,每组数据第一行是整数个数n,第二行是n个整数,n=0是输入结束的标记,相邻两组数据间输出空行

#include <stdio.h>
#define INF 100000int main()
{int x, n = 0,  kase = 0;while(scanf("%d", &n) == 1 && n){int s = 0;int max = -INF;int min = INF;for(int i = 0; i < n; i++){scanf("%d", &x);s += x;if(x < min) min = x;if(x > max) max = x;}if(kase)    printf("\n");printf("case %d:%d %d %.3f\n", ++kase, min, max, (double)s/n);}return 0;
}

当有循环的时候,就要考虑这个循环有没有跳出循环的能力,如果在while的判断条件里,没有与上n = 0;那就需要在控制台程序中ctrl+z才能手动跳出循环,因为scanf函数是对回车空格等免疫的,不能达到结束输入的效果

习题:

  1. 水仙花数
    输出100~999中的水仙花数,三位数ABC = A3+ B3 + C3;则该数为水仙花数。

知识点

  • 想用pow()函数算立方来着,但是取余的操作不能对double使用
#include <stdio.h>
#include <math.h>int main()
{for (int n = 100; n < 1000; n++){if((n / 100)*(n / 100)*(n / 100) + (n / 10 % 10)*(n / 10 % 10)*(n / 10 % 10) + (n % 10)*(n % 10)*(n % 10) == n)printf("%03d\n", n);}return 0;
}

题目2:让士兵先后一三人一排,五人一排,七人一排的变换阵型,掠翼岩队伍的排尾就知道总人数。输入韩多组数据,魅族数据包含三个非负整数a,b,c,表示每种队形排尾的人数(a<3, b<5, c<7), 输出总人数的最小值(或报告无解)。一直总人数不小于10,不大于100,输入到文件结束为止

知识点

  • 除以三余数,除以五余数,除以七余数
  • 稍微要注意的是对case的计数君的定义要放在循环外
  • 对用eof来判断文件输出结尾的应用,用户自己输入的时候是用CTRL+Z来触发
#include <stdio.h>int main()
{int a,b,c;int ca = 1;while(scanf("%d %d %d", &a, &b, &c) != EOF){for(int amount = 10; amount < 101; amount++){if(amount % 3 == a && amount % 5 == b && amount % 7 == c){printf("case %d :%d\n", ca , amount);ca++;break;}else if(amount == 100){printf("case %d :no answer\n",ca);ca++;}}}}

题目三:输入两个正整数n<m<106,输出1/n2到1/m2的和,结束标记为m = n = 0.
知识点:

  • 直接在while里面设置循环条件的话不好设置,我没想出来。
  • 临时变量每次循环得重置
#include <stdio.h>
#include <math.h>
int main()
{int m, n;int count = 0;while(scanf("%d %d", &n, &m)){double temp = 0;count++;if(m == n && m == 0 && n == 0){break;}else{for(int i = n; i <= m; i++){temp += 1/pow((double)i ,2);}printf("case %d: %.5f\n", count, temp);}}
}

题目四:分数化小数
知识点:

  • 我不知道怎么才能做到手动用c语言设定精度,最终做到的结果就是不能四舍五入的方法来保留小数,可以说还是错的,但是不知道怎么做
#include <stdio.h>
#include <math.h>
int main()
{int n, m, j;int count = 0;while(scanf("%d %d %d", &n, &m, &j)){double temp = 0;count++;if(m == n && m == 0 && n == 0 && n == j && j == 0){break;}else{temp = ((double)n) / ((double)m);               temp = floor(pow(10, j)*temp)/ pow(10, j);     //将小数点后j位以后置零printf("case %d: %g\n", count, temp);        //%g忽略末尾的零输出}}
}

算法竞赛入门经典第二版:循环结构程序设计实例与习题相关推荐

  1. 补学图论算法:算法竞赛入门经典(第二版)第十一章:

    补学图论算法:算法竞赛入门经典(第二版)第十一章: 倒排索引还没有实现! 下面是左神的图论算法,并查集笔记.和一个美团题目. ''' https://www.nowcoder.com/live/11? ...

  2. UVA-12171 雕塑 题解答案代码 算法竞赛入门经典第二版

    GitHub - jzplp/aoapc-UVA-Answer: 算法竞赛入门经典 例题和习题答案 刘汝佳 第二版 这道题目在<算法竞赛入门经典第二版>书中标注了星号,也是第一道出现星号的 ...

  3. 算法竞赛入门经典第二版课后习题答案第二章

    算法竞赛入门经典第二版课后习题答案 第二章 习题2-1水仙花数 输出100-999中的所有水仙花数.若三位数ABC满足ABC=A^3+B^3+C^3,则称其为水仙花数.例如153=1^3+5^3+3^ ...

  4. 算法竞赛入门经典(第二版)-刘汝佳-第六章 数据结构基础 习题(12/14)

    文章目录 说明 习题 习6-1 UVA 673 平衡的括号 习6-2 UVA 712 S - 树 习6-3 UVA 536 二叉树重建 习6-4 UVA 439 骑士的移动 习6-5 UVA 1600 ...

  5. UVA-1598 交易所 题解答案代码 算法竞赛入门经典第二版

    GitHub - jzplp/aoapc-UVA-Answer: 算法竞赛入门经典 例题和习题答案 刘汝佳 第二版 AC代码 有意思的一个题目.书上说这是一个不错的优先队列练习题,但实际上它其实是一个 ...

  6. UVA-814 邮件传输代理的交互 题解答案代码 算法竞赛入门经典第二版

    GitHub - jzplp/aoapc-UVA-Answer: 算法竞赛入门经典 例题和习题答案 刘汝佳 第二版 AC代码 #include<iostream> #include< ...

  7. 算法竞赛入门经典(第二版) | 习题3-10 盒子 (pair结构体)(UVa1587,Box)

    大意: 给定6个矩形的长和宽,判断他们能否构成一个长方体. 题目(提交)链接→UVa-1587 没使用过该网站的同学请猛戳这里→vJudge教程 储备知识: pair结构体: pair是将2个数据组合 ...

  8. 算法竞赛入门经典(第二版) | 例题4-5 追踪电子表格中的单元格 (UVa512,Spreadsheet Tracking,World Finals)(解法二)

    本着清晰明了易懂可以水两篇 的理念,笔者将这道题分两次发布.这是第二种解法. 第一种解法传送门→解法一+提交网址 因为解法1中有详细关于题目和输入输出格式等的介绍,这里就不过多赘述了. 分析: 一些初 ...

  9. 算法竞赛入门经典(第二版) | 例题4-3 救济金发放 (UVa133,The Dole Queue)

    提目(提交)链接→UVa-133 百度翻译→百度翻译 没使用过该网站的同学请猛戳这里→vJudge教程 分析: 最开始的固有思维是循环就用循环链表,其实完全可以把它看成一个大一点的周期类型题(一个大周 ...

最新文章

  1. 【AJAX】JavaScript的面向对象
  2. CAS 单点登录 服务器整合
  3. hdu 5585 判断一个数能否被3整除
  4. 智能化网络管理 为企业信息化保驾护航
  5. 在Java项目中整合Scala
  6. 大型网站架构利器-CDN技术
  7. python邮件模块_Python收发邮件模块,用,来,发送,接收
  8. vs201检查更新不成功_Kubernetes玩转Pod滚动更新123
  9. 电力拖动自动控制系统复习(二)
  10. oracle+in条件优化,Oracle语句优化30个规则详解
  11. Base64编码(java)
  12. s3c6410 开发板Linux系统支持 K9GAG08U0E的方法(第二篇)
  13. 关于composer安装插件时候提示找不到fxp插件时候的解决办法
  14. visio的替代者yEd Graph Editor
  15. JVM之Parallel Scavenge回收器
  16. 小伙创业做奶茶,兢兢业业把奶茶店已经扩张到了10家分店
  17. 浅谈支付宝第三方支付
  18. 局域网计算机间的传输介质,计算机局域网知识点:传输介质
  19. ubuntu 16.04安装体验网易云音乐
  20. self attention(自注意力机制)

热门文章

  1. python3文件处理_简述 Python3 文件处理
  2. 阿里开源一站式分布式事务框架seata源码分析(AT模式下TM与RM分析)
  3. 情人节相约曼谷,来一场浪漫旅行
  4. 连接MySQL数据库的两种方式
  5. ROS机器人程序设计(原书第2版)补充资料 (柒) 第七章 3D建模与仿真 urdf Gazebo V-Rep Webots Morse...
  6. 八股文C++篇(超级全)
  7. SpringSecurity进阶:OAuth2.0详解
  8. HTC VIVE Focus Wave VR SDK 新手入门开发配置全指南 Development Tutorial
  9. HDU 4752 Polygon(抛物线长度积分)
  10. tyvj 4752 数学逻辑题