|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
题目:https://ac.nowcoder.com/acm/contest/19305/1036
#include<stdio.h>
int main()
{
int m,n,c=0;
scanf("%d %d",&m,&n);
int a[n], b[n],min[n];
for(int i=0;i<n;i++)
{
scanf("%d",&a[i]);
b[i]=m-a[i];
if(a[i]>b[i])
{
min[i]=b[i];
}
}
for(int j=0;j<n;j++)
{
if(min[j]>c)
{
c=min[j];
}
}
printf("%d",c);
return 0;
}
只能通过40%,剩下的应该怎么改
根据您提供的代码,我注意到其中存在几个问题导致无法通过全部测试用例。
首先,关于输入部分,请注意在循环中读取数组 a时应该使用下标 i,而不是只写 &a。修正后的代码如下:
接下来,在第一个循环中,您计算的 b表示蚂蚁离热杆的距离,但是在赋值给 min数组时,错误地把 b赋给了 min。应该将两者的位置互换,修正后的代码如下:
- if (a > b) {
- min[ i] = b;
- } else {
- min[ i] = a;
- }
复制代码
最后,求解最小距离的过程也存在问题。目前的代码逻辑是遍历 min数组,找到最大的距离并赋给 c。但是因为初始状态下 c的值为0,所以无法正确找到最大值。可以通过将 c的初始值设置为第一个元素的值来解决这个问题。修正后的代码如下:
- c = min[0];
- for (int j = 1; j < n; j++) {
- if (min[j] > c) {
- c = min[j];
- }
- }
复制代码
综上所述,修正后的代码如下:
- #include <stdio.h>
- int main() {
- int m, n, c = 0;
- scanf("%d %d", &m, &n);
- int a[n], b[n], min[n];
- for (int i = 0; i < n; i++) {
- scanf("%d", &a[ i]);
- b[ i] = m - a[ i];
- if (a[ i] > b[ i]) {
- min[ i] = b[ i];
- } else {
- min[ i] = a[ i];
- }
- }
- c = min[0];
- for (int j = 1; j < n; j++) {
- if (min[j] > c) {
- c = min[j];
- }
- }
- printf("%d", c);
- return 0;
- }
复制代码
希望这次的修改能够帮助您通过更多的测试用例。如果还有其他问题,请随时提问。
如果问题已经解决,请设置最佳答案
|
|