目录
计算1/1-1/2+1/3-1/4+1/5 …… + 1/99 - 1/100 的值,打印出结果
//分数求和
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);
?
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;
}
?这里我们发现为了实现第四步,是完成了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;
}
?
数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;
}
?