用户会分别给出N,S
如果N的值为3,即我有3个盒子,S的输入为6。
然后我以这样的方式编码,在第一种情况下(n=3),1被添加到每个盒子,然后再次(n=2)1被添加到每个盒子(A,B,C)不包括最后一个盒子,再次(n=1)1被添加到每个盒子,除了最后一个盒子以及倒数第二个盒子。
而每个方 block 中剩余球的总数是分配总值S后显示的,
例如:
它看起来像这样,其中 a、b、c 是 3 个框。 n=3 和 s=6
A B C
1 1 1
1 1
1
-----
3 2 1 //output to be displayed
如果 n 和 s 的输入分别是 4 和 9 那么输出将是,
A B C D
1 1 1 1
1 1 1
1 1
-------
3 3 2 1 //output to be displayed
如果 n 和 s 的输入分别是 3 和 4 那么输出将是,
A B C D
1 1 1 1
1
-------
2 1 1 1 //output to be displayed
如果 n 和 s 的输入分别是 4 和 2 那么输出将是,
A B C D
1 1
-------
1 1 0 0 //output to be displayed
对于 s = n*(n+1)/2 的 n 个最大值
实际上在这种情况下,代码的复杂度不可能是 O(n^2)。所以这是我的代码:
#include <stdio.h>
#include <stdlib.h>
int main()
{
int n,i,j,s,y,x1;
scanf("%d%d",&n,&s);
int b[n];
memset(b,0,n);
x1=n;
j=0;
while(s>0)
{
y=j%n;
if(j!=n-1)
{
b[y]++;
s--;
j++;
}
else
{
b[y]++;
s--;
j=0;
n--;
}
}
for(i=0;i<x1;++i)
{
printf("%d ",b[i]);
}
return 0;
}
但是执行代码后,我的代码给出的输出是:
where n = 4 and s = 9
the output is : 3 32631 -747449654 32629
where n = 3 and s = 5
the output is :2 2 4195586
为什么会这样?我不想使用嵌套 for 循环! 但是这里有什么问题吗?请帮助我!
最佳答案
void * memset ( void * ptr, int value, size_t num );
num
是字节数,所以
memset(b,0,n);
应该是
memset(b,0,n*sizeof(int));
关于c - 输出错误,但为什么呢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28465215/