1. 每日一言
人间忽晚,山河已秋。
2. 题目(4)判断三角形
输入三个整数,判断由这三个整数能不能组成三角形,如果不行,则输出不能组成三角形,如果可以,则指出这是什么三角形(普通三角形,等边三角形,等腰三角形)
3. 解法思路
先判断能不能组成三角形,再判断是什么三角形。
4. 代码
#include<stdio.h>
int main()
{
int a = 0;
int b = 0;
int c = 0;
scanf("%d%d%d", &a, &b, &c);
if (a + b > c && a + c > b && b + c > a)//判断是否为三角形
{
if (a == b && b == c)
{
printf("等边三角形");
}
else if (a != b && a != c && b != c)//三边各不相等
{
printf("普通三角形");
}
else
{
printf("等腰三角形");
}
}
else
{
printf("不能组成三角形");
}
return 0;
}
也可以这样:
#include<stdio.h>
int main()
{
int a = 0;
int b = 0;
int c = 0;
scanf("%d%d%d", &a, &b, &c);
if (a + b > c && a + c > b && b + c > a)//判断是否为三角形
{
if (a == b && b == c)
{
printf("等边三角形");
}
else if (a == b || a == c || b == c)
{
printf("等腰三角形");
}
else
{
printf("普通三角形");
}
}
else
{
printf("不能组成三角形");
}
return 0;
}
运行结果:
5. 题目(5)打印最小公倍数
输入a,b两个整数,计算这两个整数的最小公倍数,并打印出来
6. 解题思路
7. 法一:穷举所有数,找到最小的能同时被a,b整除的数
8. 代码:
思考一下,能同时被a,b整除的数肯定大于等于a或b
可以这样改进
9. 法二:先求最大公约数,然后用a,b两数乘积除以最大公约数
法一说到底还是穷举每个数,效率较慢。
法二要做两个工作,看起来效率低,其实不然。为什么呐?往下看自然而然就懂了。
那么怎么求最大公约数呐?
我有两个方法
9.1 求最大公约数的方法
9.1.1 使用穷举法
代码:
测试:
9.1.2 使用辗转相除法
你问什么是辗转相除法?
答:我以18%24为例
然后用a,b两数乘积除以最大公约数即可获得最小公倍数
代码:
测试:
10. 题目(6)分数相加
计算 1/1 - 1/2 + 1/3 - 1/4 + 1/5 - … + 1/99 - 1/100 的值,并打印出结果
11. 解题思路
- 分类计算,将全部正数相加计算(z),再将负数全部计算(f),最后让 z - f
代码如下
#include<stdio.h>
int main()
{
double z = 0;
double f = 0;
int i = 0;
int j = 0;
for (i = 1; i < 100; i += 2)//计算正数的和
{
z += 1.0 / i;//别忘了要写成小数除法~~
}
//同理
for (i = 2; i <= 100; i += 2)//计算负数的和
{
f += 1.0 / i;//别忘了要写成小数除法~~
}
printf("%lf", z - f);
return 0;
}
结果
2. 整体计算,想一想,原式子的每一项可以写成(-1)的n-1次方再乘以n
你可能还是有点晕
详细解释一下
假如原式子每一项都是正数
你肯定会这样写
#include<stdio.h>
int main()
{
int i = 0;
double sum = 0;
for (i = 1; i <= 100; i++)
{
sum += 1.0 / i;
}
printf("%lf", sum);
return 0;
}
要求的题目无非就是每偶数项加个负号就ok了
于是你可以这样写
#include<stdio.h>
#include<math.h>
int main()
{
int i = 0;
double sum = 0;
for (i = 1; i <= 100; i++)
{
sum += 1.0 / i * pow(-1, i - 1);//用-1的i-1次方来变号
}
printf("%lf", sum);
return 0;
}
或者这样
#include<stdio.h>
#include<math.h>
int main()
{
int i = 0;
int f = 1;
double sum = 0;
for (i = 1; i <= 100; i++)
{
sum += 1.0 / i * f;//用f来变号
f = -f;
}
printf("%lf", sum);
return 0;
}
到这里是不是豁然开朗呐~?