1.输出1-n之间所有偶数
2.斐波那契数列
3.表演打分
4.棋盘上的学问
5.统计
6.素数的判断
7.最大公约数
8.数字反转
9.回文日期
10.回文日期2(构造法)
11.级数求和
12.角谷猜想
13.统计正数
14.求自然常数e的值
15.正常血压
#include <bits/stdc++.h> using namespace std; int main() { int n; cin >> n; if (n > 2) cout << "2";//由题意知第一个数前没有空格所以单独拿出来 for (int i = 1; i <= n; i++) { if (i != 2 && i % 2 == 0)//偶数判断对2求余为0 cout << " " << i;//注意这里末尾不要加endl否则每次循环结束都会自动换行 } return 0; }
#include <bits/stdc++.h> using namespace std; int main() { int k, a = 1, b = 1, c = 1;//将c赋值为一则k=1或k=2时输出皆为1 cin >> k; for (int i = 3; i <= k; i++) { c = a + b;//交换变量前后相加 a = b; b = c; } cout << c << endl; return 0; }
#include <bits/stdc++.h> using namespace std; int main() { int n, s = 0, sum = 0, max = -1, min = 101;//将max定义为最小值,min定义为最大值 for (int i = 1; i <= 10; i++) { cin >> n; if (n > max)//把每个输入的值与max做比较,比max大就更新max的值 max = n; if (n < min)//把每个输入的值与min做比较,比min小就更新min的值 min = n; sum = sum + n;//将每个输入的n通过每次循环加在一起赋给sum } s = sum - max - min; cout << fixed << setprecision(3) << s * 1.0 / 8 << endl; return 0; }
#include <bits/stdc++.h> using namespace std; int main() { int n; unsigned long long f = 1, sum = 0;//由于最后f乘等的值,sum加等的值大所以用unsigned long long类型定义 cin >> n; for (int i = 1; i <= n; i++) { sum += f; f *= 2;//这里也可以用f=pow(2,i-1);,需要放在sum语句上面,缺点是运算时间会变长 } cout << sum << endl; return 0; }
continue 语句 作用:提前结束本次循环,即跳过循环体中下面尚未执行的语句,接着进行下 一次是否执行循环的判定。 注意,此语句只能在循环结构使用,经常与选择结构结合使用,用以结束本次 循环。
#include <bits/stdc++.h> using namespace std; int main() { int n, sum = 0; cin >> n; for (int i = 1; i <= n; i++) { //if (i % 2 == 0 || i % 3 == 0) //sum++; if(i%2 && i%3)continue;//i%2并且i%3不等于0时continue返回到循环里面不执行sum++ sum++//即i%2=0或者i%3=0条件为假跳出if语句执行sum++ } cout << sum << endl; return 0; }
出循环体,执行循环结构后面的语句。 说明:break只能终止并跳出最近一层的结构。break不能用于循环语句和switch语句之 外的任何其它语句之中。 一般形式:break;
#include <bits/stdc++.h> using namespace std; int main() { int n, f = 0; cin >> n; for (int i = 2; i * i < n; i++)//循环到该数的平方根,减少循环次数和计算时间 { if (n % i == 0)//如果n%i=0说明n有因子不是素数 f = 1; break;//遇到n的因子就跳出循环,减少循环次数 } if (f == 0) cout << "YES" << endl; else cout << "NO" << endl; return 0; }
#include <bits/stdc++.h> using namespace std; int main() { int m, n, a; cin >> m >> n; while (a) { a = m % n; m = n; n = a; } cout << m << endl; return 0; }
另一种写法:
#include <bits/stdc++.h> using namespace std; int main() { int n, m; cin >> n >> m; for (int i = n > m ? m : n; i > 0; i--) { if (n % i == 0 && m % i == 0) { cout << i << endl; break; } } return 0; }
#include <bits/stdc++.h> using namespace std; int main() { int n, a; cin >> n; while (n) { a = n % 10; cout << a; n /= 10; } return 0; }
以上是最近一开始写的,有几个问题1.负号无法按要求输出 2.前置0没有去掉
看了老师的代码后发现sum=sum*10+n%10;这个等式真的很绝,不仅方便而且直接解决掉了上面两个错误
技巧1:数字反转法
#include <bits/stdc++.h> using namespace std; int main() { int n, sum = 0, a; cin >> n; while (n) { a = n % 10; sum = sum * 10 + a;//牢记这个方法!!!通过循环将每次模等的结果乘10 n /= 10; } cout << sum << endl; return 0; }
#include <bits/stdc++.h> using namespace std; int main() { int n, sum = 0, y, m, d, f = 0; cin >> n; for (int i = n; i > 0; i /= 10) sum = sum * 10 + i % 10;//这里用到了上面数字反转的技巧 if (sum != n) cout << "NO";//判断是否是回文数字 else { y = n / 10000, m = n / 100 % 100, d = n % 100; if ((m == 1 || m == 3 || m == 5 || m == 7 || m == 8 || m == 10 || m == 12) && d < 32) f = 1;//1,3,5,7,8,10,12月均是31天 else if (m == 2) { if ((y % 4 == 0 && y % 100 != 0 || y % 400 == 0) && d < 30) f = 1;//2月是闰年则29天,不是闰年则28天 else if (d < 29) f = 1; } else if ((m == 2 || m == 4 || m == 6 || m == 9 || m == 11) && d < 31) f = 1;//2,4,6,9,11月均是30天 } if (f)//f=1为真执行该语句输出YES否则输出NO cout << "YES"; else cout << "NO"; return 0; }
这个相比于上面的难了一些,大多数人第一想法估计是暴力枚举的方法,把范围内的数挨个通过循环判断是否为回文数以及回文日期,但是这样不仅麻烦而且很可能运行超时,这里老师介绍给我们了一个方法构造法 :构造出所有的回文日期(由分析知一共365种)并判断是否在所给范围内
技巧2:构造法
#include <bits/stdc++.h> using namespace std; int main() { int n, m, sum = 0; cin >> n >> m; for (int i = 1; i <= 12; i++) { //i表示月份 int k = 31; if (i == 2) k = 29; if (i == 4 || i == 6 || i == 11 || i == 9) k = 30; for (int j = 1; j <= k; j++) { //j表示日期 int y = j % 10 * 1000 + j / 10 * 100 + i % 10 * 10 + i / 10; //通过月份和日期反推年份 y = y * 10000 + i * 100 + j; if (y >= n && y <= m) sum++; } } cout << sum << endl; return 0; }
4 whlie循环 while 语句的格式如下: while(表达式){ 循环体 }
#include <bits/stdc++.h> using namespace std; int main() { int k; long long i = 1; double sum = 0.0; cin >> k; while (sum <= k) { sum = sum + 1.0 / i; i++; } cout << i << endl; return 0; }
#include <bits/stdc++.h> using namespace std; int main() { int n; cin >> n; while (n != 1) { if (n % 2 == 0) { cout << n << "/2=" << n / 2 << endl;//按格式输出 n = n / 2;//先输出再更新n的值 } else { cout << n << "*3+1=" << n * 3 + 1 << endl; n = n * 3 + 1; } } if (n == 1) cout << "End" << endl; return 0; }
do-while 语句 do-while 语句是 C++ 中用于解决至少执行一次重复操作(循环体)的循 环语句。 do-while 语句的格式如下: do{ 循环体 }while(表达式);
#include <bits/stdc++.h> using namespace std; int main() { int n, f = 0; do { cin >> n; if (n > 0) f++; } while (n); cout << f << endl; return 0; }
#include <bits/stdc++.h> using namespace std; int main() { int n; double sum = 1.0; cin >> n; for (int i = 1; i <= n; i++) { long long f = 1;//要在循环内定义乘等器 for (int j = 1; j <= i; j++) { f *= j; } sum = sum + 1.0 / f; } cout << fixed << setprecision(10) << sum << endl; return 0; }
#include <bits/stdc++.h> using namespace std; int main() { int n, a, b, f = 0, max = 0; cin >> n; for (int i = 1; i <= n; i++) { cin >> a >> b; if (a >= 90 && a <= 140 && b >= 60 && b <= 90) { f++; if (f > max) max = f; } else f = 0; } cout << f << endl; return 0; }