22~~
int n;
scanf("%d", &n);
int a[n];
for (int i = 0; i < n; ++i)
scanf("%d", &a[i]);
int count25 = 0, count50 = 0; // 25元和50元的数量
for (int i = 0; i < n; ++i)
{
int money = a[i];
if (money == 25)
count25++;
else if (money == 50)
{
if (count25 == 0)
{
printf("NO\n");
return 0; // 无法找零,直接退出
}
count25--; // 减去找零25元
count50++; // 收入50元
}
else if (money == 100)
{
// 100元找零优先用50+25
if (count50 > 0 && count25 > 0)
{
count50--;
count25--;
}
else if (count25 >= 3)
count25 -= 3; // 用3张25元
else
{
printf("NO\n");
return 0;
}
}
}
printf("YES\n");
return 0;
bug1:段错误核心原因是「数组定义时机错误」:在读取 n 之前就定义了变长数组 a[n] ,导致 n 未初始化(值随机,可能为负数或非法值),进而引发数组越界或内存分配错误。
浙公网安备 33010602011771号