错误的输出,但为什么?

时间:2015-02-11 21:50:52

标签: c arrays algorithm while-loop distribution

用户将分别给出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循环! 但这里有什么不对吗?请帮帮我!

2 个答案:

答案 0 :(得分:2)

void * memset ( void * ptr, int value, size_t num );

num是字节数,所以

memset(b,0,n);

应该是

memset(b,0,n*sizeof(int));

Live Demo

答案 1 :(得分:1)

memset的第三个参数是要设置的字节的数量。由于bint的数组,因此需要清除4*n个字节,假定为32位整数。正确的代码是

memset( b, 0, sizeof(b) );