用户将分别给出N,S
如果N的值是3,即我有3个盒子,S的输入是6。 然后我以这样的方式编码:在第一种情况(n = 3)中,每个方框添加1,然后再次(n = 2)1添加到每个方框(A,B,C),不包括最后一个方框,再次(n = 1)1添加到每个框中,不包括最后一个框以及第二个最后一个框 并且在分配总值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 ans的输入是4和9,则再次那么输出就是,
A B C D
1 1 1 1
1 1 1
1 1
-------
3 3 2 1 //output to be displayed
如果n ans的输入是3和4,则再次那么输出就是,
A B C D
1 1 1 1
1
-------
2 1 1 1 //output to be displayed
如果n ans的输入是4和2,则再次那么输出就是,
A B C D
1 1
-------
1 1 0 0 //output to be displayed
对于n = s * n *(n + 1)/ 2
的最大值实际上在这种情况下,代码的复杂性不能是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循环! 但这里有什么不对吗?请帮帮我!
答案 0 :(得分:2)
void * memset ( void * ptr, int value, size_t num );
num
是字节数,所以
memset(b,0,n);
应该是
memset(b,0,n*sizeof(int));
答案 1 :(得分:1)
memset
的第三个参数是要设置的字节的数量。由于b
是int
的数组,因此需要清除4*n
个字节,假定为32位整数。正确的代码是
memset( b, 0, sizeof(b) );