第二章 循环结构程序设计
来源:互联网 发布:淘宝代写软文怎么发布 编辑:程序博客网 时间:2024/05/21 11:35
本章摘要:
2.1 for循环
2.2 while循环和do-while循环
2.3循环的代价
2.4算法竞赛中的输入输出框架
[注解]:
1、文件读写方式和命名的严格性
2、变量在赋值之前的值是不确定的
2.1 for循环
2-1 输出1,2,3·······n的值
#include<stdio.h>int main(){ int n, i; scanf("%d", &n); for(i=1; i<=n; i++){ printf("%d\n", i); } printf("%d\n", i); //① return 0;}
从①处可以看出:执行顺序是先i++,再判断
2-2 输出形如aabb的4位完全平方数:函数floor(x)返回不超过x的最大整数
#include<stdio.h>#include<math.h>int main(){ int i, j, sum; for(i=1; i<=9; i++){ for(j=0; j<=9; j++){ sum = i*1100 + j*11; int sqr = floor(sqrt(sum) + 0.5); if(sqr*sqr == sum) printf("%d\n", sum); } } return 0; }
7744
不用floor(x)函数:
#include<stdio.h>#include<math.h>int main(){ int i, j, num, num1; for(i=1; i<=9; i++){ for(j=0; j<=9; j++){ num = 1100*i+11*j; num1 = (int)sqrt((double)num);//sqrt(x):double类型 if(num == num1*num1){ printf("%d\n", num); } } } return 0;}
枚举平方根x:
#include<stdio.h>int main(){ int x; for(x=1; ; x++) { int n = x * x;//先确保数是完全平方数 if(n<1000){ continue; } if(n>9999){ break; } int a = n/100; int b = n%100; if(a/10==a%10 && b/10==b%10){ printf("%d\n", n); } } return 0;}
2-4 3*n+1问题
对于任意大于1的自然数,如果n为奇数,则n变为3*n+1,否则变为n的一半,经过若干次变换,一定会使n变为1。例如,3->10->5->16->8->4->2->1
输入n(n<=10^9)
#include<stdio.h>int main(){ long long n; int k=0; scanf("%lld", &n); while(n!=1){ if(n%2==0){ n = n/2; } else{ n = 3*n+1; } k++; } printf("%d\n", k); return 0;}
2-6 求PI(近似求值)
#include<stdio.h>int main(){ int i = 1; double sum=0.0 ,k = 1.0/(2*i-1), n; for(; k >= 1e-6; i++){ k = 1.0/(2*i-1); n = (-1)*k; if(i%2!=0){ sum += (-1)*n; } else{ sum += n; } } printf("%f\n", sum*4); return 0;}
2-7 阶乘和的末6位(S=1!+2!+3!+······+n!)
涉及到如何求末6位,且n<=10^6
#include<stdio.h>int main(){ int i,j, n, total; long long sum = 0; scanf("%d", &n); for(i=1; i<=n; i++){ total =1; for(j=1; j<=i; j++){ total = total * j; } sum += total; } int tag = sum % 1000000; printf("%d\n", tag); return 0;}
10
37913
#include<stdio.h>#include<time.h> // 头文件int main(){ const int m = 1000000; int i =1, j, sum = 0, n; scanf("%d", &n); for(; i<=n; i++){ int factory = 1; for(j=1; j<=i; j++){ factory = factory*j%m; } sum = (sum+factory)%m; } printf("%d\n", sum%m); printf("%.2f\n", (double)clock()/CLOCKS_PER_SEC); // 计算运行时间(s) return 0;}
上面的一些程序显示了算术运算溢出和程序效率低下的问题
不同系统下,程序输入结束应该:
①Windows下,Ctrl+Z
②Linux下,Ctrl+D
0 0
- 第二章 循环结构程序设计
- 第二章 循环结构程序设计
- 第二章 循环结构程序设计
- 第二章循环结构程序设计习题
- 紫书第二章-----循环结构程序设计
- 《算法竞赛入门经典》读书笔记 第二章 循环结构程序设计
- 紫书第二章循环结构程序设计笔记
- 第六章 循环结构程序设计
- JAVA程序设计 第二章结构化程序设计
- 经典重拾-第一部分 语言篇-第二章 -循环结构程序设计
- 【算法竞赛入门经典学习日记】第二章 循环结构程序设计
- 第二章 Java的基本程序设计结构
- 第6章 循环结构程序设计
- 第02章_循环结构程序设计
- 第六章 循环结构的程序设计
- 第2章 循环结构程序设计
- 第3章循环结构程序设计练习
- 第2章 循环结构程序设计
- git常见操作
- C++虚析构函数、纯虚析构函数
- 跟我一起玩WPF-走进WPF
- 【C++】primer plus 练习7.3
- C++中虚析构函数的作用
- 第二章 循环结构程序设计
- poj 3748 水题位操作
- JProfiler入门使用教程:Eclipse集成
- Action、Menus、ToolBars主窗体构成的实现
- 【C++】primer plus 练习7.5
- tomcat pipline设计模式
- HDU - 5119 Happy Matt Friends(DP)
- 广播与服务day2笔记
- MySQL数据备份之mysqldump使用