目录
第一题分数求和
第二题:求10 个整数中最大值
第三题:在屏幕上输出9*9乘法口诀表
第四题:写一个代码:打印100~200之间的素数
第五题:求斐波那契数的第N个数
斐波那契数的概念:前两个数相加等于第三个数
斐波那契数的公式:
第六题:汉诺塔游戏
思路:
1. 当n=1时,需要一步
2.当n=2时,需要三步
3.当n=3时,需要七步
总结一下
公式结论
第七题:青蛙跳台阶问题
第八题数9的个数
第十题 猜数字游戏(复习版本)
第十一题 二分查找(复习版)
第一题分数求和
计算1/1-1/2+1/3-1/4+1/5 …… + 1/99 - 1/100 的值,打印出结果
- 将这个试子分成两部分,第一部分为1/1+1/3+1/5+....+1/99;第二部分1/2+1/4+.....1/100
- 然后将这两个试子相减
- 注意这里分数是浮点型
- double型是长整型浮点型
//分数求和int main() {double sum = 0.0;double sub = 0.0;double acc = 0.0;for (int i = 1; i <= 100; i++) {if (i % 2 == 0) {sum += (1.0 / i);}else {sub += (1.0 / i);}}acc = sub - sum;printf("%lf", acc);
第二题:求10 个整数中最大值
//求10 个整数中最大值int main()
{int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };/*scanf("%d ", arr);*/int i = 0;int j = 0;for(int i = 0;i<10;i++){if (arr[i] >arr[i + 1]){j = arr[i];}else{j = arr[i+1];}}printf("%d", j);return 0;
}
第三题:在屏幕上输出9*9乘法口诀表
两层循环第一层循环用来控制乘号左边,第二层循环用来控制乘号右边和每一层的个数
//在屏幕上输出9*9乘法口诀表int main()
{for(int i=1;i<=9;i++){for(int j=1;j<=i;j++){printf("%d*%d=%d ", j, i, j*i);}printf("\n");}return 0;
}
第四题:写一个代码:打印100~200之间的素数
第五题:求斐波那契数的第N个数
斐波那契数的概念:前两个数相加等于第三个数
1 1 2 3 5 8 13 21 34 55
斐波那契数的公式:
当N<=2时 Fib(N)= 1;
当N>3时, Fib(N)=Fib(N-2)+Fib(N-1);2
//求斐波那契数列的第N个数int Fib(int n) {if (n <= 2) {return 1;}else {return Fib(n - 1) + Fib(n - 2);}}int main() {int n = 0;scanf("%d", &n);int sum = Fib(n);printf("第%d个数为:%d\n", n,sum);return 0;}
第六题:汉诺塔游戏
思路:
1. 当n=1时,需要一步
2.当n=2时,需要三步
3.当n=3时,需要七步
这里我们发现为了实现第四步,是完成了n=2的所有步骤3步。若将黑红当一个整体。
那么我们要实现最后一步是不是也是完成相同的操作即n=2时的操作。
总结一下
首先,是完成一次n=2时的操作 即(n-1)时操作的操作。
在加上一步将蓝色放入第三根柱子的操作
最后,是将黑红当一个整体,在完成一次n=2即(n-1)时的操作。
公式结论
汉诺塔公式为:
当n=1时 要1步
当n>1时 要 2*(n-1)+1步
//汉诺塔游戏
int Hanoi(int n) {if (n == 1) {return 1;}else {return 1 + 2 * Hanoi(n - 1);}}int main() {int n = 0;scanf("%d", &n);int sum = Hanoi(n);printf("需要%d步", sum);return 0;}
第七题:青蛙跳台阶问题
问题:青蛙一次可以跳一个台阶,也可以一次跳2个台阶。请问如果有n个台阶时,青蛙有几种方法
台阶数 | 第一次跳一格 | 第一次跳两格 | 方法数 |
1 | 1 | 1 | |
2 | 1 1 | 2 | 2 |
3 | 111;12 | 21 | 3 |
4 | 1111;121;112 | 22;211 | 5 |
5 | 11111;1211;1121;1112;122 | 2111;221;212; | 8 |
n | n-1 | n-2 | (n-1)+(n-2) |
//青蛙跳台游戏
int fac(int n) {if (n == 1) {return 1;}else if(n==2) {return 2;}else{return fac(n-1)+fac(n-2);}}int main() {int n = 0;scanf("%d", &n);int sum = fac(n);printf("需要%d步", sum);return 0;}
第八题数9的个数
数100以内的出现过9的数字
//数9的个数
int main() {int n = 1;while (n <= 100) {if (n % 10 == 9) {printf("%d ", n);}else if(n / 10 == 9) {printf("%d ", n);}n++;}return 0;
}
第十题 猜数字游戏(复习版本)
易错点:
1. srand((unsigned int)time(NULL));随机数种子,不能放在while循环里,要不然每次输入数字,都会生成随机的种子,会导致永远猜不对数字。
2.scanf("%d", &n);要放在循环里,要不然每次上一次猜对的数会一直在循环里循环。
//猜数字游戏
void menu() {printf("*******************\n");printf("*******0 结束******\n");printf("*******1 开始******\n");printf("*******************\n");printf("输入0/1\n");
}int fac(int n) {srand((unsigned int)time(NULL));int nnn = rand()%100+1;return nnn;}int main() {menu();int n = 0;int nn = 0;scanf("%d", &nn);srand((unsigned int)time(NULL));if (nn == 1) {int sum = fac(n);while (1) {printf("输入你猜的数字:");scanf("%d", &n);if (n < sum) {printf("猜小了\n");}else if (n > sum) {printf("猜大了\n");}else {printf("猜对了");break;}}}else {printf("结束游戏");}return 0;}
第十一题 二分查找(复习版)
编写代码在一个整形有序数组中查找具体的某个数
要求:找到了就打印数字所在的下标,找不到则输出:找不到。
#define _CRT_SECURE_NO_WARNINGS
#include<stdlib.h>
#include<stdio.h>
#include<string.h>//二分查找
int main()
{int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };int sum = sizeof(arr) / sizeof(arr[0]);printf("数组有%d个\n", sum);int left = 0;int right = sum - 1;int n = 0;printf("请输入你要查找的数:");scanf("%d", &n);while (n){int mid = (left + (right - left)) / 2;if (n < arr[mid]){right = mid - 1;}else if (n > arr[mid]){left = mid + 1;}else{printf("找到了下标为:%d", arr[n]);break;}}return 0;
}