C 输出正确,但在线评委获胜';除了
问题:C 输出正确,但在线评委获胜';除了,c,C,问题: 您将获得以下过程 有一个有n根柱子的平台。在这个平台上的一些列中,1×1的正方形一个接一个地出现。如果列中没有正方形,则一个正方形将占据底行。否则,此列最高正方形的顶部将显示一个正方形 当所有n列中至少有一个正方形时,将删除底部行。你将得到1分,所有剩余的方块将落下一行 您的任务是计算您将获得的点数 输入: 输入的第一行包含两个整数n和m(1≤n、 m≤1000)-平台的长度和正方形的数量 下一行包含m个整数c1、c2、…、cm(1≤词≤n) -第i个正方形将出现的列 输出: 打印一个整
您将获得以下过程 有一个有n根柱子的平台。在这个平台上的一些列中,1×1的正方形一个接一个地出现。如果列中没有正方形,则一个正方形将占据底行。否则,此列最高正方形的顶部将显示一个正方形 当所有n列中至少有一个正方形时,将删除底部行。你将得到1分,所有剩余的方块将落下一行 您的任务是计算您将获得的点数 输入:
输入的第一行包含两个整数n和m(1≤n、 m≤1000)-平台的长度和正方形的数量 下一行包含m个整数c1、c2、…、cm(1≤词≤n) -第i个正方形将出现的列 输出:
打印一个整数-您将获得的点数 示例:
输入:
39
12313
输出:
二, 我遇到的问题:
我已经尝试了这个例子和其他一些输入,并得到了正确的输出,但当我把我的代码粘贴到网上的时候 它告诉我测试一的运行时错误 注意
我是编程新手,所以,如果这是一个简单的问题,我可以搜索一下。我做了一个小时的搜索和工作,但我就是找不到这个错误的原因 我的代码:
#include <stdio.h>
#include <string.h>
// use fgets, strtok , sscanf
int main ()
{
int length,blocks,holder=0;
scanf("%d %d",&length,&blocks);
int x[length];
int c[length];
char str2[blocks*2];
getchar();
fgets(str2, blocks*2 , stdin);
char* piece = strtok(str2, " ");
for(int i=0; piece != NULL ; i++)
{
sscanf(piece, "%d" , &x[i]);
piece = strtok(NULL, " ");
}
//to input each block to the platform
for(int u=0; u<length ; u++)
{
holder=0;
for(int k=0; k<blocks ; k++)
{
if(x[k]==u+1)
{
holder++;
}
}
c[u] = 0;
c[u] += holder;
}
int smallest=c[0];
for(int i=1 ; i<length ; i++)
{
if(smallest>c[i])
{
smallest= c[i];
}
}
printf("%d\n",smallest);
return 0;
}
#包括
#包括
//使用fgets、strtok、sscanf
int main()
{
整数长度,块,保持器=0;
scanf(“%d%d”、&length、&blocks);
int x[长度];
int c[长度];
字符str2[块*2];
getchar();
fgets(str2,模块*2,标准输入法);
字符*块=strtok(str2,“”);
for(int i=0;piece!=NULL;i++)
{
sscanf(件号,“%d”、&x[i]);
工件=strtok(空,“”);
}
//将每个块输入平台
对于(intu=0;u当我将代码粘贴到在线判断时,它会告诉我测试一的运行时错误
使用您的输入,使用您发布的确切代码,我还看到一个运行时错误,即数组索引超出范围
要解决此问题,需要查看变量intx[length]
的创建是否符合预期目的
我对以下两个方面进行了更改:
- 变量
x
应定义为块
元素,而不是长度
元素,以便在以后填充它的循环中生存。此更改非常重要,如果没有它,将导致数组索引超出范围错误
- 虽然循环本身可能是可行的,但它被重新写入了我认为更惯用的结构中
您的代码中可能存在其他问题,但通过在代码中进行上述更改并运行示例输入:
39
12313
结果2
:
更改区域已被注释
int main ()
{
int length,blocks,holder=0;
scanf("%d %d",&length,&blocks);
int x[blocks];//change to contain 'blocks' elements
int c[length];
//char str2[blocks*2];//too small for eg `1 1 2 2 2 3 1 2 3`
// |||||||||||||||||+NULL == 18 bytes
char str2[80] = {0}// needs 18 minimum, but memory is cheap
getchar();
fgets(str2, blocks*2 , stdin);
// Changed loop construct slightly here
int i = 0;
char* piece = strtok(str2, " ");
while(piece)
{
x[i] = atoi(piece);
i++;
piece = strtok(NULL, " ");
}
//to input each block to the platform
for(int u=0; u<length ; u++)
{
holder=0;
for(int k=0; k<blocks ; k++)
{
if(x[k]==u+1)
{
holder++;
}
}
c[u] = 0;
c[u] += holder;
}
int smallest=c[0];
for(int i=1 ; i<length ; i++)
{
if(smallest>c[i])
{
smallest= c[i];
}
}
printf("%d\n",smallest);
return 0;
}
int main()
{
整数长度,块,保持器=0;
scanf(“%d%d”、&length、&blocks);
int x[blocks];//更改为包含“blocks”元素
int c[长度];
//char str2[blocks*2];//对于例如'1 2 3 3'来说太小`
//||||||||||||||+NULL==18字节
char str2[80]={0}//最少需要18个字符,但内存很便宜
getchar();
fgets(str2,模块*2,标准输入法);
//这里稍微改变了循环结构
int i=0;
字符*块=strtok(str2,“”);
while(件)
{
x[i]=atoi(件);
i++;
工件=strtok(空,“”);
}
//将每个块输入平台
对于(int u=0;uThank you!它成功了运行时错误再次消失非常感谢您,先生。评论不用于扩展讨论;此对话已结束。