1.判断构成三角形
输入3个正整数 A, B, C, 判断这三个数能不能构成一个三角形
思路:
两边之和 > 第三边;两边之差 < 第三边。
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
bool Judge(int a, int b, int c) {
if ((a + b > c && a + c > b && b + c > a) && (a - b < c && a - c < b && b - c < a))
return true;
else
return false;
}
int main() {
int a, b, c;
scanf("%d%d%d", &a, &b, &c);
if (Judge(a, b, c))
printf("OK\n");
else
printf("NO\n");
return 0;
}
2. 打鱼还是晒网
有个人从2003年1月1日开始,三天打鱼两天晒网,请输入月份、日期,问在当年的某一天他是在打鱼还是晒网。
思路:
算距离2003.1.1的天数,根据对5取模的不同,判断在打鱼还是晒网。
#define _CRT_SECURE_NO_WARNINGS 1
#include <cstdio>
int cal[13] = { 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
int main() {
int month, day;
scanf("%d%d", &month, &day);
int days = 0;
for (int i = 0; i < month; i++) {
days += cal[i];
}
days += day;
//printf("%d\n", days);
int status = days % 5;
if (status >= 1 && status <= 3)
printf("打鱼\n");
else
printf("晒网");
return 0;
}
3. 丑数
质因子分解
参考:《算法笔记》5.6 质因子分解
一个数的所有质因子:
情况一:
所有质因子都小于等于 sqrt(n)
情况二:
有一个质因子大于 sqrt(n),其余的质因子小于等于 sqrt(n)
模板代码:
// 先打素数表
struct factor{
int x;
int cnt;
}fac[10];
int num = 0;
if(n % prime[i] == 0){
fac[num].x = prime[i];
fac[num].cnt = 0;
while(n % prime[i] == 0){
fac[num].cnt++;
n /= prime[i];
}
num++;
}
if(n != 1){
fac[num].x = n;
fac[num].cnt = 1;
}
题解思路:
先打只包含2 3 5 7 的素数表,如果这个数的质因子中最后一个质因子不是这些数,说明有其他的质因子。所以就不是丑数。
题解代码
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <math.h>
int prime[4] = { 2, 3, 5, 7 };
struct factor {
int x; // 因子的值
int cnt; // 因子的个数
}fac[10];
int main() {
int n;
scanf("%d", &n);
int sqr = (int)sqrt(1.0*n);
int num = 0;
for (int i = 0; i < 4 && prime[i] <= sqr; i++) {
if (n % prime[i] == 0) {
fac[num].x = prime[i];
fac[num].cnt = 0;
while (n % prime[i] == 0) {
fac[num].cnt++;
n /= prime[i];
}
num++;
}
if (n != 1) {
fac[num].x = n;
fac[num++].cnt = 1;
}
}
int last = fac[num - 1].x;
if (last == 2 || last == 3 || last == 5 || last == 7)
printf("YES");
else
printf("NO");
return 0;
}