1.P5735 【深基7.例1】距离函数
#include <stdio.h>
#include <math.h>
// 计算两点之间的距离
double calculateDistance(double x1, double y1, double x2, double y2) {
return sqrt((x2 - x1) * (x2 - x1) + (y2 - y1) * (y2 - y1));
}
int main() {
double x1, y1, x2, y2, x3, y3;
// 输入三个点的坐标
scanf("%lf %lf", &x1, &y1);
scanf("%lf %lf", &x2, &y2);
scanf("%lf %lf", &x3, &y3);
// 计算三条边的长度
double side1 = calculateDistance(x1, y1, x2, y2);
double side2 = calculateDistance(x2, y2, x3, y3);
double side3 = calculateDistance(x3, y3, x1, y1);
// 计算周长
double perimeter = side1 + side2 + side3;
// 输出结果,保留两位小数
printf("%.2lf\n", perimeter);
return 0;
}
2.P5736 【深基7.例2】质数筛
#include <stdio.h>
// 判断一个数是否为质数
int isPrime(int num) {
if (num <= 1) {
return 0;
}
for (int i = 2; i * i <= num; i++) {
if (num % i == 0) {
return 0;
}
}
return 1;
}
int main() {
int n;
// 输入整数个数
scanf("%d", &n);
// 动态分配数组来存储n个整数
int numbers[100];
// 输入n个整数
for (int i = 0; i < n; i++) {
scanf("%d", &numbers[i]);
}
// 输出剩余的质数
for (int i = 0; i < n; i++) {
if (isPrime(numbers[i])) {
printf("%d", numbers[i]);
if (i < n - 1) {
printf(" ");
}
}
}
return 0;
}
3.P5737 【深基7.例3】闰年展示
#include <stdio.h>
// 判断是否为闰年
int isLeapYear(int year) {
return (year % 4 == 0 && year % 100 != 0) || (year % 400 == 0);
}
int main() {
int x, y;
// 输入两个正整数
scanf("%d %d", &x, &y);
// 计算区间内的闰年个数
int count = 0;
// 输出闰年年份
for (int i = x; i <= y; i++) {
if (isLeapYear(i)) {
count++;
}
}
// 输出闰年个数
printf("%d\n", count);
// 输出所有闰年年份
for (int i = x; i <= y; i++) {
if (isLeapYear(i)) {
printf("%d ", i);
}
}
return 0;
}
4.P5738 【深基7.例4】歌唱比赛
#include <stdio.h>
int main() {
int n, m;
scanf("%d %d", &n, &m);
double maxScore = 0.0;
for (int i = 0; i < n; i++) {
int scores[20];
for (int j = 0; j < m; j++) {
scanf("%d", &scores[j]);
}
// 排序
for (int k = 0; k < m - 1; k++) {
for (int l = 0; l < m - k - 1; l++) {
if (scores[l] > scores[l + 1]) {
int temp = scores[l];
scores[l] = scores[l + 1];
scores[l + 1] = temp;
}
}
}
double totalScore = 0.0;
// 去掉最低分和最高分
for (int k = 1; k < m - 1; k++) {
totalScore += scores[k];
}
double averageScore = totalScore / (m - 2);
if (averageScore > maxScore) {
maxScore = averageScore;
}
}
printf("%.2lf\n", maxScore);
return 0;
}
5.P5739 【深基7.例7】计算阶乘
#include <stdio.h>
int factorial(int n) {
if (n == 1 || n == 0) {
return 1;
} else {
return n * factorial(n - 1);
}
}
int main() {
int n;
scanf("%d", &n);
printf("%d\n", factorial(n));
return 0;
}
6.P5461 赦免战俘
#include<bits/stdc++.h>
using namespace std;
const int maxn = 1 << 11;
int N, M, MAP[maxn][maxn];
void Init(int len, int x, int y)
{
if (len == 2)
{
MAP[x][y] = 0;
return;
}
for (int i = x; i <= x + len / 2 - 1; i++)
for (int j = y; j <= y + len / 2 - 1; j++)
MAP[i][j] = 0;
Init(len / 2, x + len / 2, y);
Init(len / 2, x + len / 2, y + len / 2);
Init(len / 2, x ,y + len / 2);
}
int main()
{
cin >> N;
M = 1 << N;
fill(MAP[0], MAP[0] + sizeof(MAP) / sizeof(int), 1);
Init(M, 1, 1);
for (int i = 1; i <= M; i++)
{
for (int j = 1; j <= M; j++)
cout << MAP[i][j] << " ";
cout << endl;
}
return 0;
}
7.P5740 【深基7.例9】最厉害的学生
#include <stdio.h>
struct Student {
char name[9];
int chinese;
int math;
int english;
int total;
};
int main() {
int N;
scanf("%d", &N);
struct Student students[1000];
// 输入学生信息
for (int i = 0; i < N; i++) {
scanf("%s %d %d %d", students[i].name, &students[i].chinese, &students[i].math, &students[i].english);
students[i].total = students[i].chinese + students[i].math + students[i].english;
}
// 找到总分最高的学生
int maxIndex = 0;
for (int i = 1; i < N; i++) {
if (students[i].total > students[maxIndex].total) {
maxIndex = i;
}
}
// 输出最厉害的学生信息
printf("%s %d %d %d\n", students[maxIndex].name, students[maxIndex].chinese, students[maxIndex].math, students[maxIndex].english);
return 0;
}
8.P5741 【深基7.例10】旗鼓相当的对手 - 加强版
9.P5742 【深基7.例11】评等级
10.P1075 [NOIP2012 普及组] 质因数分解
#include<cstdio>
int main(){
int n;
scanf("%d",&n);
for(int i=2;i<=n;++i)
if(n%i==0){
printf("%d",n/i);
return 0;
}
}
11.P1304 哥德巴赫猜想
12.P1217 [USACO1.5] 回文质数 Prime Palindromes
13.P2415 集合求和
#include <stdio.h>
long long num, sum = 0, n = 0;
int main() {
while (scanf("%lld", &num) == 1) {
sum += num;
n++;
}
while (--n) {
sum *= 2;
}
printf("%lld", sum);
return 0;
}
14.P5743 【深基7.习8】猴子吃桃
#include <stdio.h>
int main() {
int n;
scanf("%d", &n);
int peaches = 1; // 初始桃子数量
for (int i = 1; i < n; i++) {
peaches = (peaches + 1) * 2; // 吃掉一半加一个
}
printf("%d\n", peaches);
return 0;
}
15.P5744 【深基7.习9】培训
#include <stdio.h>
// 定义结构体存储学员信息
struct Student {
char name[50];
int age;
int noipScore;
};
// 定义培训函数,传入结构体类型,返回同样的结构体类型
struct Student train(struct Student stu) {
// 年龄加一
stu.age += 1;
// 成绩提升20%,但不能超过满分600
stu.noipScore = (int)(stu.noipScore * 1.2);
if (stu.noipScore > 600) {
stu.noipScore = 600;
}
return stu;
}
int main() {
int n;
scanf("%d", &n);
struct Student students[n];
// 输入学员信息
for (int i = 0; i < n; i++) {
scanf("%s %d %d", students[i].name, &students[i].age, &students[i].noipScore);
}
// 培训并输出学员信息
for (int i = 0; i < n; i++) {
struct Student trainedStudent = train(students[i]);
printf("%s %d %d\n", trainedStudent.name, trainedStudent.age, trainedStudent.noipScore);
}
return 0;
}