帮我添加注释:#include <stdio.h> #include <stdbool.h> int a[100][2]; bool zijiancha(int n, int b, int count, int sum) { int y = 0; int r = 0; bool flag = false; for (y = n - b; y < n - count; y++) { if (sum >= (a[y][1] - a[y][0])) { sum = sum + a[y][0]; for (r = y; r < n - count - 1; r++) { a[r][0] = a[r + 1][0]; a[r][1] = a[r + 1][1]; } count++; flag = true; break; } } if (flag == false) { return count == n; } return zijiancha(n, b, count, sum); } bool jiancha(int n, int b) { int sum = 0; int r = 0; int y = 0; int count = 0; for (r = n - b; r < n; r++) { if (a[r][0] >= a[r][1]) { sum += a[r][0] - a[r][1]; for (y = r; y < n - b + count - 1; y++) { a[y][0] = a[y + 1][0]; a[y][1] = a[y + 1][1]; } count++; } } return zijiancha(n, b, count, sum); } int main() { int m = 0; int i = 0; int j = 0; int n = 0; int b[100]; scanf("%d", &m); int k = 0; for (i = 0; i < m; i++) { scanf("%d", &b[i]); for (j = 0; j < b[i]; j++) { scanf("%d%d", &a[k][0], &a[k][1]); k++; } } for (j = 0, n = 0; j < m; j++) { n = n + b[j]; if (jiancha(n, b[j])) { printf("YES\n"); } else { printf("NO\n"); } } return 0; }
时间: 2024-02-15 19:11:25 浏览: 53
SeqList.h #include <stdio.h> //包含标准输入输出流的头文件 #include <assert.h
// 包含标准输入输出库和 bool 类型库
#include <stdio.h>
#include <stdbool.h>
// 定义二维数组 a,用来存储输入数据
int a[100][2];
// 自减查(递归实现)
bool zijiancha(int n, int b, int count, int sum)
{
int y = 0; // 循环变量
int r = 0; // 循环变量
bool flag = false; // 标记是否找到符合条件的元素
// 在范围(n-b ~ n-count)内查找符合条件的元素
for (y = n - b; y < n - count; y++)
{
if (sum >= (a[y][1] - a[y][0]))
{
sum = sum + a[y][0];
// 找到符合条件的元素后,将其后续元素向前移动
for (r = y; r < n - count - 1; r++)
{
a[r][0] = a[r + 1][0];
a[r][1] = a[r + 1][1];
}
count++; // 符合条件的元素个数加 1
flag = true; // 标记找到符合条件的元素
break; // 结束循环
}
}
// 如果在范围内没有找到符合条件的元素,则判断是否所有元素都已遍历
if (flag == false)
{
return count == n;
}
// 继续进行自减查
return zijiancha(n, b, count, sum);
}
// 检查函数
bool jiancha(int n, int b)
{
int sum = 0; // 计算每组数据需要减去的总数
int r = 0; // 循环变量
int y = 0; // 循环变量
int count = 0; // 符合条件的元素个数
// 在范围(n-b ~ n)内查找符合条件的元素
for (r = n - b; r < n; r++)
{
if (a[r][0] >= a[r][1])
{
sum += a[r][0] - a[r][1];
// 找到符合条件的元素后,将其后续元素向前移动
for (y = r; y < n - b + count - 1; y++)
{
a[y][0] = a[y + 1][0];
a[y][1] = a[y + 1][1];
}
count++; // 符合条件的元素个数加 1
}
}
// 调用自减查函数进行查找
return zijiancha(n, b, count, sum);
}
// 主函数
int main()
{
int m = 0; // 数据组数
int i = 0; // 循环变量
int j = 0; // 循环变量
int n = 0; // 数组元素个数
int b[100]; // 记录每组数据的元素个数
scanf("%d", &m); // 输入数据组数
int k = 0; // 二维数组 a 的下标
// 输入所有数据并存储到二维数组 a 中
for (i = 0; i < m; i++)
{
scanf("%d", &b[i]);
for (j = 0; j < b[i]; j++)
{
scanf("%d%d", &a[k][0], &a[k][1]);
k++;
}
}
// 逐组进行检查,并输出结果
for (j = 0, n = 0; j < m; j++)
{
n = n + b[j];
if (jiancha(n, b[j]))
{
printf("YES\n");
}
else
{
printf("NO\n");
}
}
return 0;
}
阅读全文